?? ? ?? ???? ?? ???? ?? WeChat? ???? ??? ?? ??? ??? ?????. WeChat ?????? ? ???? ???? WeChat ??? ???? ????. ?? ?? ?? ?? ?? ??:
??, ?? ??? ??? ??? ????? ?? ?? ? WeChat ?? ??? ????? ??? ???. ??? ???? ?? ??? ?????. ??? ? WeChat? ?? ?? ??? ???? ????? ???? ??? ?? ??? ??? ???? ??????. ??? ???? ????? ->?? ??->API ????? ??? ? ??
?? ?????.
?? ???? ??
郵件中參數(shù) | API參數(shù)名 | 詳細(xì)說明 |
---|---|---|
APPID | appid | appid是微信公眾賬號或開放平臺APP的唯一標(biāo)識,在公眾平臺申請公眾賬號或者在開放平臺申請APP賬號后,微信會自動分配對應(yīng)的appid,用于標(biāo)識該應(yīng)用。商戶的微信支付審核通過郵件中也會包含該字段值。 |
微信支付商戶號 | mch_id | 商戶申請微信支付后,由微信支付分配的商戶收款賬號。 |
API密鑰 | key | 交易過程生成簽名的密鑰,僅保留在商戶系統(tǒng)和微信支付后臺,不會在網(wǎng)絡(luò)中傳播。商戶妥善保管該Key,切勿在網(wǎng)絡(luò)中傳輸,不能在其他客戶端中存儲,保證key不會被泄漏。商戶可根據(jù)郵件提示登錄微信商戶平臺進行設(shè)置。 |
Appsecret | secret | AppSecret是APPID對應(yīng)的接口密碼,用于獲取接口調(diào)用憑證access_token時使用。在微信支付中,先通過OAuth2.0接口獲取用戶openid,此openid用于微信內(nèi)網(wǎng)頁支付模式下單接口使用。在開發(fā)模式中獲取AppSecret(成為開發(fā)者且?guī)ぬ枦]有異常狀態(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)答對象 var packageReqHandler = new RequestHandler(null); string spbill_create_ip = Request.UserHostAddress; //初始化 //packageReqHandler.Init(); //packageReqHandler.SetKey(TenPayInfo.Key); //設(shè)置package訂單參數(shù) packageReqHandler.SetParameter("appid", appID); //公眾賬號ID packageReqHandler.SetParameter("body", StrUtil.GetCutString(productName, 100)); //不能超過127個字符 packageReqHandler.SetParameter("mch_id", mchid); //商戶號 packageReqHandler.SetParameter("nonce_str", nonceStr.ToLower()); //隨機字符串 packageReqHandler.SetParameter("notify_url", notifyUrl); //接收財付通通知的URL packageReqHandler.SetParameter("openid", openId); //openid packageReqHandler.SetParameter("out_trade_no", sp_billno); //商家訂單號 // packageReqHandler.SetParameter("attach", ""); //附加數(shù)據(jù) 未來可用于區(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)一下單接口請求訂單 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); //將信息傳遞給支付頁面 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)部初始化后會觸發(fā)WeixinJSBridgeReady事件。 document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() { $(function () { //公眾號支付 jQuery('#getBrandWCPayRequest').click(function (e) { WeixinJSBridge.invoke('getBrandWCPayRequest', { "appId": "@ViewBag.appId", //公眾號名稱 "timeStamp": "@ViewBag.timeStamp", //時間戳 "nonceStr": "@ViewBag.nonceStr", //隨機串 "package": "@Html.Raw(ViewBag.package.ToString())",//擴展包 "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"; } // 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。 //因此微信團隊建議,當(dāng)收到ok返回時,向商戶后臺詢問是否收到交易成功的通知,若收到通知,前端展示交易成功的界面;若此時未收到通知,商戶后臺主動調(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 }; //通知消息實體 NotifyMessage message = null; //訂單處理相關(guān)的方法內(nèi)全局變量 bool isNeedDeal = false; //標(biāo)識訂單是否需要處理 string orderNo = string.Empty; //訂單編號 (需要根據(jù)商家數(shù)據(jù)包字段判斷所屬訂單) CorpSalesOrder saleOrder = null; try { message = HttpClientHelper.XmlDeserialize<NotifyMessage>(xmlString); //訂單號 獲得 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("【微信支付異步通知】出錯,訂單編號:" + orderNo + ",錯誤原因:" + e.Message); } catch (Exception e) { //此處記錄異常日志 returnMsg.Return_Code = "FAIL"; returnMsg.Return_Msg = e.Message; LoggerHelper.Log("【微信支付異步通知】出錯,訂單編號:" + orderNo + ",錯誤原因:" + (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? ???? ??? ????, ?? ???? ???? ???? ?? ??? ?? ?? ??? ?? ????. ? ???? ??? ????? ??? ??? ??? ??, ??, ??, ?? ??? ???? ?? ??? ??? ???? ??? ???? ?? ????. ▲?? ?? ?? ?? ??? ????, ?? ?? ???? ?, ?, ? ? ??? ??? ?? ???? ???? ???, ??? ??, ?? ???? ?? ? ?? ??? ???? ??. ?? ??? ??? ???? ???? ????? ???? ???? ??
