?? ? ?? ???? ?? ???? ?? WeChat? ???? ??? ?? ??? ??? ?????. WeChat ?????? ? ???? ???? WeChat ??? ???? ????. ?? ?? ?? ?? ?? ??:
??, ?? ??? ??? ??? ????? ?? ?? ? WeChat ?? ??? ????? ??? ???. ??? ???? ?? ??? ?????. ??? ? WeChat? ?? ?? ??? ???? ????? ???? ??? ?? ??? ??? ???? ??????. ??? ???? ????? ->?? ??->API ????? ??? ? ??
?? ?????.
?? ???? ??
郵件中參數(shù) | API參數(shù)名 | 詳細(xì)說(shuō)明 |
---|---|---|
APPID | appid | appid是微信公眾賬號(hào)或開(kāi)放平臺(tái)APP的唯一標(biāo)識(shí),在公眾平臺(tái)申請(qǐng)公眾賬號(hào)或者在開(kāi)放平臺(tái)申請(qǐng)APP賬號(hào)后,微信會(huì)自動(dòng)分配對(duì)應(yīng)的appid,用于標(biāo)識(shí)該應(yīng)用。商戶的微信支付審核通過(guò)郵件中也會(huì)包含該字段值。 |
微信支付商戶號(hào) | mch_id | 商戶申請(qǐng)微信支付后,由微信支付分配的商戶收款賬號(hào)。 |
API密鑰 | key | 交易過(guò)程生成簽名的密鑰,僅保留在商戶系統(tǒng)和微信支付后臺(tái),不會(huì)在網(wǎng)絡(luò)中傳播。商戶妥善保管該Key,切勿在網(wǎng)絡(luò)中傳輸,不能在其他客戶端中存儲(chǔ),保證key不會(huì)被泄漏。商戶可根據(jù)郵件提示登錄微信商戶平臺(tái)進(jìn)行設(shè)置。 |
Appsecret | secret | AppSecret是APPID對(duì)應(yīng)的接口密碼,用于獲取接口調(diào)用憑證access_token時(shí)使用。在微信支付中,先通過(guò)OAuth2.0接口獲取用戶openid,此openid用于微信內(nèi)網(wǎng)頁(yè)支付模式下單接口使用。在開(kāi)發(fā)模式中獲取AppSecret(成為開(kāi)發(fā)者且?guī)ぬ?hào)沒(méi)有異常狀態(tài))。 |
? ??? ???? ?? ?? ??? ???? ????? ?????.
??? ??? ? WeChat ?? ???? ?? ?? ??:
1. ??? ??? ?? ?? ?????? ???? ??? ?????. [?? ?? API]; ?? ??? ???? ?? WeChat OAuth2.0 ? ??? ??? ???? ???. ???? WeChat OpenId ??? ???? ??? ???? ????.
string timeStamp = TenPayUtil.GetTimestamp(); string nonceStr = TenPayUtil.GetNoncestr(); string paySign = string.Empty; //創(chuàng)建支付應(yīng)答對(duì)象 var packageReqHandler = new RequestHandler(null); string spbill_create_ip = Request.UserHostAddress; //初始化 //packageReqHandler.Init(); //packageReqHandler.SetKey(TenPayInfo.Key); //設(shè)置package訂單參數(shù) packageReqHandler.SetParameter("appid", appID); //公眾賬號(hào)ID packageReqHandler.SetParameter("body", StrUtil.GetCutString(productName, 100)); //不能超過(guò)127個(gè)字符 packageReqHandler.SetParameter("mch_id", mchid); //商戶號(hào) packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower()); //隨機(jī)字符串 packageReqHandler.SetParameter("notify_url", notifyUrl); //接收財(cái)付通通知的URL packageReqHandler.SetParameter("openid", openId); //openid packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家訂單號(hào) // packageReqHandler.SetParameter("attach", ""); //附加數(shù)據(jù) 未來(lái)可用于區(qū)分不同微信支付業(yè)務(wù) packageReqHandler.SetParameter("spbill_create_ip", spbill_create_ip); //用戶的公網(wǎng)ip,不是商戶服務(wù)器IP packageReqHandler.SetParameter("total_fee", (onlinePayMoney * 100).ToString("0")); //商品金額,以分為單位(money * 100).ToString() packageReqHandler.SetParameter("trade_type", "JSAPI"); //交易類型 //獲取package包 string sign = packageReqHandler.CreateMd5Sign("key", TenPayInfo.Key); packageReqHandler.SetParameter("sign", sign); //交易類型 string data = packageReqHandler.ParseXML(); LoggerHelper.Log(data); //調(diào)用統(tǒng)一下單接口請(qǐng)求訂單 var result = TenPayV3Service.Unifiedorder(data); LoggerHelper.Log(result); var res = XDocument.Parse(result); string prepayId = string.Empty; if (res.Element("xml").Element("return_code").Value == "SUCCESS") { prepayId = res.Element("xml").Element("prepay_id").Value; } string package = string.Format("prepay_id={0}", prepayId); timeStamp = TenPayUtil.GetTimestamp(); //設(shè)置支付參數(shù) var paySignReqHandler = new RequestHandler(null); paySignReqHandler.SetParameter("appId", appID); paySignReqHandler.SetParameter("timeStamp", timeStamp); paySignReqHandler.SetParameter("nonceStr", nonceStr); paySignReqHandler.SetParameter("package", package); paySignReqHandler.SetParameter("signType", "MD5"); paySign = paySignReqHandler.CreateMd5Sign("key", TenPayInfo.Key); //將信息傳遞給支付頁(yè)面 ViewBag.appId = appID; ViewBag.timeStamp = timeStamp; ViewBag.nonceStr = nonceStr; ViewBag.package = package; ViewBag.paySign = paySign;
??? ??? js ?? ?????.
<script type="text/javascript"> // 當(dāng)微信內(nèi)置瀏覽器完成內(nèi)部初始化后會(huì)觸發(fā)WeixinJSBridgeReady事件。 document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { $(function () { //公眾號(hào)支付 jQuery('#getBrandWCPayRequest').click(function (e) { WeixinJSBridge.invoke('getBrandWCPayRequest', { "appId": "@ViewBag.appId", //公眾號(hào)名稱 "timeStamp": "@ViewBag.timeStamp", //時(shí)間戳 "nonceStr": "@ViewBag.nonceStr", //隨機(jī)串 "package": "@Html.Raw(ViewBag.package.ToString())",//擴(kuò)展包 "signType": "MD5", //微信簽名方式 "paySign": "@ViewBag.paySign" //微信簽名 }, function (res) { if (res.err_msg == "get_brand_wcpay_request:ok") { //alert("微信支付成功!"); window.location.href = "@WxPaySettingConfig.WmallURL/Wmall/TradePay/Success/@ViewBag.ShopId/?orderNo=@orderNoMark"; } else if (res.err_msg == "get_brand_wcpay_request:cancel") { //alert("用戶取消支付!"); } else { window.location.href = "/wxpay/jsapi/error/?isPayFail=1&csid=@ViewBag.ShopId&orderNo=@orderNoMark&biztype=1"; } // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對(duì)可靠。 //因此微信團(tuán)隊(duì)建議,當(dāng)收到ok返回時(shí),向商戶后臺(tái)詢問(wèn)是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此時(shí)未收到通知,商戶后臺(tái)主動(dòng)調(diào)用查詢訂單接口,查詢訂單的當(dāng)前狀態(tài),并反饋給前端展示相應(yīng)的界面。 }); }); }); //WeixinJSBridge.log('yo~ ready.'); }, false); </script>
2. ??? ???? ?? ??, api? ????. ?? api? ?????. [?? ?? ?? API]
[HttpPost] public void NoticeUrl() { string xmlString = HttpClientHelper.GetPostString(Request); 5 //此處應(yīng)記錄日志 LoggerHelper.Log(string.Format("【微支付】異步通知參數(shù):{0}", xmlString)); 8 var returnMsg = new ReturnMessage() { Return_Code = "SUCCESS", Return_Msg = string.Empty }; //通知消息實(shí)體 NotifyMessage message = null; //訂單處理相關(guān)的方法內(nèi)全局變量 bool isNeedDeal = false; //標(biāo)識(shí)訂單是否需要處理 string orderNo = string.Empty; //訂單編號(hào) (需要根據(jù)商家數(shù)據(jù)包字段判斷所屬訂單) CorpSalesOrder saleOrder = null; try { message = HttpClientHelper.XmlDeserialize<NotifyMessage>(xmlString); //訂單號(hào) 獲得 orderNo = message.Out_Trade_No; if (string.IsNullOrEmpty(orderNo)) { throw new InvalidOperationException("未找到該訂單信息."); } 45 var doc = new XmlDocument(); doc.LoadXml(xmlString); var dic = new Dictionary<string, string>(); string sign = string.Empty; foreach (XmlNode node in doc.FirstChild.ChildNodes) { if (node.Name.ToLower() != "sign") dic.Add(node.Name, node.InnerText); else sign = node.InnerText; } UnifiedWxPayModel model = UnifiedWxPayModel.CreateUnifiedModel(xddAppId, xddMchid, xddWxkey); if (model.ValidateMD5Signature(dic, sign)) { //處理通知 業(yè)務(wù)邏輯: if (message.Return_Code == "SUCCESS") { if (message.Result_Code == "SUCCESS") { //此處處理支付成功后的業(yè)務(wù)邏輯 } else { throw new InvalidOperationException(string.Format("{0}:{1}", message.Err_Code, message.Err_Code_Des)); } } else { throw new InvalidOperationException(message.Return_Msg); } } } catch (InvalidOperationException e) { //此處記錄異常日志 returnMsg.Return_Code = "FAIL"; returnMsg.Return_Msg = e.Message; LoggerHelper.Log("【微信支付異步通知】出錯(cuò),訂單編號(hào):" + orderNo + ",錯(cuò)誤原因:" + e.Message); } catch (Exception e) { //此處記錄異常日志 returnMsg.Return_Code = "FAIL"; returnMsg.Return_Msg = e.Message; LoggerHelper.Log("【微信支付異步通知】出錯(cuò),訂單編號(hào):" + orderNo + ",錯(cuò)誤原因:" + (e.InnerException == null ? e.Message : e.InnerException.ToString())); } Response.Write(returnMsg.ToXmlString()); Response.End(); }
WeChat ?? ?? ??? ?? ? ?? WeChat ?? ?? ??? ??? PHP ??? ????? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

Scrapy? WeChat ?? ??? ?? ??? ? ??? ?????. WeChat? ?? ? ? ?? ?? ?? ?? ??? ????????, ??? ???? ?? ??? ?? ??? ??? ???. ?? ?? ?? ??? WeChat ?? ??? ??? ??? ?????. ???? ? ?? ??? ??, ??? ??? ? ?? ??? ??? ? ?? ?????. ? ??? ????, ???? ? ??? ???? ??? ??? ? ????. ??? ? ???? Scrapy ?????? ???? WeChat ?? ?? ?? ????? ???? ??? ???????. Scr

WeChat ?? ?? ??? ???? ???? ?? ??, ?? ??, ?? ??, ????? ?? ? ??? ??? ????. ??? ??: 1. ?? ?? ??? ?? ??? ??? V ??? ?? ?? ??? ?? ???. ? ??? ?? ??? ???? ??? ??? ???? ?? ?? ?? ??? ? ?? ??? ? ?? ????. 2. ?? ??. ??? ?? ??? ??? ?? ???? ? ?? ??? ??? ????. ?? ??, ??? ?? ??? ??? ?? ? ?? ?? ?? ?? WeChat ?? ??? ???? ? ????.

Python? ??? ??? ?? ? ? ??? ??? ?? ??? ????? ?????. ??? ??? ???? ??? ?? ???? ?? ? ???, ???? ???? ?? ??? ??? ?????. ??? ??? ?? ? ???? Python ???? ?? ?????. ? ????? Python ???? ???? WeChat ?? ?? ?? ??? ?? ??? ?????. WeChat ?? ??? ???? ??? ???? ?? ?? ?? ??? ????? ?? ??? ?? ???? ?? ? ???? ?? ??? ?????.

??? ??? ??? WeChat ?? ??? ?? ? ?? ??? ??? ??? ??? ?????. WeChat ?? ??? ? ?? ??? ????? ?? ?????? ???? ?? ??? ????. ? ????? PHP ??? ?? ?? WeChat ?? ?? API ?????? ???? ??? ?????. 1. ?? WeChat ?? ?? API ?????? ???? ?? ???? WeChat ?? ?? ??? ???? WeChat ?? ????? ??? ????? ??? ???? ???. ??? ????? ???? ?? ??? AppID ? AppSe? ?? ? ????.

Laravel? ???? WeChat ?? ??? ???? ??? ?? ???? ???? ?? WeChat ?? ??? ?? ???? ?? ?? ? ?? ??? ?? ??? ???? ??? ??? ???? ??????. ???? ???? WeChat ?? ??? ???? ? ??? ?? ???? ???? ??? ???? ??? ???? ? ????. ? ???? Laravel ?????? ???? ??? ???? ???? ??? ???? ???? ?? ??? ?????. ???? ?? ?? ?? ??? Laravel ?????? ???? ??? ???? ???. ???

?? ??? ??? ??? ??? ??? ? ?? ?? ??? ??? ?? 8?? ??? ??? ? ????. ?? ??? ???? ??: 1. ??? "?? ??"? ??? ? "? ??? ? ??? ??"? ?????. ? ?? ?? ??? ?????. 2. ? ?? ??? ??? ? ?? ? ?? ?? ??? ?? + ??? ???? "??? ???"? ???? ? ?? ??? ?????. 3. ?? ???? ???? ??? ? "??"? ?????. ???? ???'? ???? ?? ??? ??? ?????.

???? ??? ??? ??? ???? ???? ?? WeChat ?? ??? ?? ???? ???? ?? ??? ?????. WeChat ?? ??? ?? ??? ???? ?? ??????, ??? ???? ????, ??? ???? ?? ? ????. WeChat ?? ?? ??????? ? ? ???? ?? ?? ? ?? ???? ??? Go ??? ???? WeChat ?? ?? ??????? ????? ???? ????. Go ??? Google? ??? ????? ???, ??? ???? ???, ???? ??? ??? ??????? ???? ? ?????. ?? ??? ????

8? 1? ? ????? ??? ???, ?? ?? ??? ?? ??? ?? ??? ??????. ?????? ???? ??? ?? ??? ??? ??? ???? ?? ??, ??, ?? ? ?? ??? ??? ?? ??? ??? ???? ??? ????? ??????. ??? ??? ????? ??? ??????? ???? ??? ? ???? ?? ????. WeChat? ???? ??? ????, ?? ???? ???? ???? ?? ??? ?? ?? ??? ?? ????. ? ???? ??? ????? ??? ??? ??? ??, ??, ??, ?? ??? ???? ?? ??? ??? ???? ??? ???? ?? ????. ▲?? ?? ?? ?? ??? ????, ?? ?? ???? ?, ?, ? ? ??? ??? ?? ???? ???? ???, ??? ??, ?? ???? ?? ? ?? ??? ???? ??. ?? ??? ??? ???? ???? ????? ???? ???? ??
