溫州峰門鄉(xiāng)微信支付的退款功能開發(fā)

閱讀 37181  ·  發(fā)布日期 2020-08-24 17:26  ·  溫州優(yōu)光網(wǎng)絡(luò)科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】 這次給大家?guī)砦⑿胖Ц兜耐丝罟δ荛_發(fā),微信支付退款功能開發(fā)的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。先吐槽下微信的文檔和demo,重要的步驟信息沒有強(qiáng)調(diào)清楚,.net的demo就沒有跑成功過。1.微信掃碼登錄2.微信PC端支付幾經(jīng)摸索才走通這個(gè)退款功能。下面介紹下微信支付退款功能的開發(fā)步驟:一、下載證書并導(dǎo)入到... 【溫州小程序開發(fā),溫州微信公眾號(hào),平陽做網(wǎng)站,平陽網(wǎng)站建設(shè)公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號(hào),山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡(luò)網(wǎng)店服務(wù),政采云網(wǎng)店管理服務(wù)】...

微信支付的退款功能開發(fā)

這次給大家?guī)砦⑿胖Ц兜耐丝罟δ荛_發(fā),微信支付退款功能開發(fā)的注意事項(xiàng)有哪些,下面就是實(shí)戰(zhàn)案例,一起來看一下。
先吐槽下微信的文檔和demo,重要的步驟信息沒有強(qiáng)調(diào)清楚,.net的demo就沒有跑成功過。
1.微信掃碼登錄2.微信PC端支付幾經(jīng)摸索才走通這個(gè)退款功能。
下面介紹下微信支付退款功能的開發(fā)步驟:
一、下載證書并導(dǎo)入到系統(tǒng)微信退款是需要證書的,這個(gè)證書不是官方demo中的證書,而是需要自己在微信商戶平臺(tái)中的api安全欄下載的證書,在官方的證書使用實(shí)例的一個(gè)word文檔看到下面話:
C#有一點(diǎn)需要注意,除了在代碼中使用apiclient_cert.p12之外還需要將該證書導(dǎo)入操作系統(tǒng)才能使用,1、代碼中使用、;2、導(dǎo)入操作系統(tǒng),二者缺一不可。
.NET版本需要大于2.0 之前就是不知道這兩步,浪費(fèi)了太多時(shí)間。
所以先下載證書:
下載的時(shí)候需要手機(jī)驗(yàn)證及登錄密碼。
下載后找到apiclient_cert.p12這個(gè)證書,雙擊導(dǎo)入,導(dǎo)入的時(shí)候提示輸入密碼,這個(gè)密碼就是商戶ID,且必須是在自己的商戶平臺(tái)下載的證書。
否則會(huì)出現(xiàn)密碼錯(cuò)誤的提示:
導(dǎo)入正確的提示:
二、代碼退款 這個(gè)地方可以直接用官方demo中的代碼,demo下載 需要修改WxPayConfig中的幾個(gè)參數(shù):
    public const string APPID = "wxf6dd794bcexxxx";
public const string MCHID = "xxxx";
public const string KEY = "xxxxx849ba56abbe56e05xxxxx";
public const string APPSECRET = "---";
//=======【證書路徑設(shè)置】===================================== /* 證書路徑,注意應(yīng)該填寫絕對(duì)路徑(僅退款、撤銷訂單時(shí)需要) */ public const string SSLCERT_PATH = "/WxPayAPI/cert/apiclient_cert.p12";
public const string SSLCERT_PASSWORD = "131xxxx";
上面的SSLCERT_PASSWORD就是MCHID,也就是商戶ID,SSLCERT_PASSWORD錯(cuò)誤會(huì)出現(xiàn)指定的網(wǎng)絡(luò)密碼不正確的提示:
接下來在控制器中增加一個(gè)退款方法,包含微信訂單號(hào)、商戶訂單號(hào)、總金額和退款金額。
商戶訂單號(hào)和微信訂單號(hào)二選一。
詳細(xì)參數(shù) public ActionResult DoRefund() {
string result = Refund.Run("","131667780120trade_no", "1", "1");
return Content(result);
}
Refund類的Run方法:
/*** * 申請(qǐng)退款完整業(yè)務(wù)流程邏輯 * @param transaction_id 微信訂單號(hào)(優(yōu)先使用) * @param out_trade_no 商戶訂單號(hào) * @param total_fee 訂單總金額 * @param refund_fee 退款金額 * @return 退款結(jié)果(xml格式) */ public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee) {
Logger.Info("Refund is processing...");
WxPayData data = new WxPayData();
if (!string.IsNullOrEmpty(transaction_id))//微信訂單號(hào)存在的條件下,則已微信訂單號(hào)為準(zhǔn) {
data.SetValue("transaction_id", transaction_id);
}
else//微信訂單號(hào)不存在,才根據(jù)商戶訂單號(hào)去退款 {
data.SetValue("out_trade_no", out_trade_no);
}
data.SetValue("total_fee", int.Parse(total_fee));
//訂單總金額 data.SetValue("refund_fee", int.Parse(refund_fee));
//退款金額 data.SetValue("out_refund_no", out_trade_no);
//隨機(jī)生成商戶退款單號(hào) data.SetValue("op_user_id", WxPayConfig.MCHID);
//操作員,默認(rèn)為商戶號(hào) WxPayData result = WxPayApi.Refund(data);
//提交退款申請(qǐng)給API,接收返回?cái)?shù)據(jù) Logger.Info("Refund process complete, result : " + result.ToXml());
return result.ToPrintStr();
}
Refund:
方法 /** * * 申請(qǐng)退款 * @param WxPayData inputObj 提交給申請(qǐng)退款A(yù)PI的參數(shù) * @param int timeOut 超時(shí)時(shí)間 * @throws WxPayException * @return 成功時(shí)返回接口調(diào)用結(jié)果,其他拋異常 */ public static WxPayData Refund(WxPayData inputObj, int timeOut = 6) {
string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
//檢測(cè)必填參數(shù) if (!inputObj.IsSet("out_trade_no") && !inputObj.IsSet("transaction_id")) {
throw new WxPayException("退款申請(qǐng)接口中,out_trade_no、transaction_id至少填一個(gè)!");
}
else if (!inputObj.IsSet("out_refund_no")) {
throw new WxPayException("退款申請(qǐng)接口中,缺少必填參數(shù)out_refund_no!");
}
else if (!inputObj.IsSet("total_fee")) {
throw new WxPayException("退款申請(qǐng)接口中,缺少必填參數(shù)total_fee!");
}
else if (!inputObj.IsSet("refund_fee")) {
throw new WxPayException("退款申請(qǐng)接口中,缺少必填參數(shù)refund_fee!");
}
else if (!inputObj.IsSet("op_user_id")) {
throw new WxPayException("退款申請(qǐng)接口中,缺少必填參數(shù)op_user_id!");
}
inputObj.SetValue("appid", WxPayConfig.APPID);
//公眾賬號(hào)ID inputObj.SetValue("mch_id", WxPayConfig.MCHID);
//商戶號(hào) inputObj.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", ""));
//隨機(jī)字符串 inputObj.SetValue("sign", inputObj.MakeSign());
//簽名 string xml = inputObj.ToXml();
var start = DateTime.Now;
Log.Debug("WxPayApi", "Refund request : " + xml);
string response = HttpService.Post(xml, url, true, timeOut);
//調(diào)用HTTP通信接口提交數(shù)據(jù)到API Log.Debug("WxPayApi", "Refund response : " + response);
var end = DateTime.Now;
int timeCost = (int)((end - start).TotalMilliseconds);
//獲得接口耗時(shí) //將xml格式的結(jié)果轉(zhuǎn)換為對(duì)象以返回 WxPayData result = new WxPayData();
result.FromXml(response);
ReportCostTime(url, timeCost, result);
//測(cè)速上報(bào) return result;
}
生產(chǎn)環(huán)境中記得修改成自己的參數(shù)。
如果參數(shù)都正確,將會(huì)返回:
而且,微信馬上回收到退款通知:
小結(jié):
至此,退款功能已經(jīng)走通,其實(shí)如果參數(shù)和流程對(duì)了,這個(gè)地方還是很簡(jiǎn)單的,微信的規(guī)定是可以申請(qǐng)一年內(nèi)交易的退款。
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!推薦閱讀:
ss3的漸變?nèi)绾问褂胘Query、Angular、node中的Promise詳解H5的視頻播放庫video.js詳解以上就是微信支付的退款功能開發(fā)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
微信
分享相關(guān)標(biāo)簽:
開發(fā) 功能 退款本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
上一篇:
微信硬件H5開發(fā)之控制燈光
下一篇:
微信掃碼支付的Asp.Net MVC開發(fā)相關(guān)文章相關(guān)視頻修改微信號(hào)有什么影響嗎?微信中共享實(shí)時(shí)位置什么意思數(shù)據(jù)庫設(shè)計(jì)的基本原則是什么?微信小程序調(diào)用圖片安全API微信支付的退款功能開發(fā)PHP開發(fā)基礎(chǔ)教程之環(huán)境搭建PHP開發(fā)基礎(chǔ)教程之學(xué)習(xí)之語法PHP開發(fā)基礎(chǔ)教程之變量PHP開發(fā)基礎(chǔ)教程之輸出語句PHP開發(fā)基礎(chǔ)教程之?dāng)?shù)據(jù)類型 [溫州做微信公眾號(hào)]