<ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>



      最近公司研發(fā)了幾個(gè)電商小程序,還有一個(gè)核心的電商直播,只要是電商一般都會(huì)涉及到交易信息,離不開支付系統(tǒng),這里我們統(tǒng)一實(shí)現(xiàn)小程序的支付流程(與服務(wù)號(hào)實(shí)現(xiàn)步驟一樣)。


      目錄
      1、開通小程序的支付能力
      2、商戶后臺(tái)綁定同一主體的APPID并授權(quán)
      3、預(yù)先設(shè)置回調(diào)地址,商戶后臺(tái)設(shè)置開發(fā)的配置
      4、代碼實(shí)現(xiàn)統(tǒng)一支付5、微信支付回調(diào)
      6、總結(jié)



      開通小程序的支付能力

      開通小程序支付功能比較簡(jiǎn)單,基本上按微信文檔一步一步的申請(qǐng)就好,如圖



      ?

      以上三個(gè)步驟就申請(qǐng)完成

      1、提交資料給微信

      2、微信審核并簽署協(xié)議

      3、商戶后臺(tái)綁定同主體的APPID

      ?

      商戶后臺(tái)綁定同一主體的APPID并授權(quán)

      1、登錄商戶后臺(tái)https://pay.weixin.qq.com,進(jìn)入產(chǎn)品中心—APPID授權(quán)管理,進(jìn)入授權(quán)頁(yè)面如圖:



      ?

      2、填寫相關(guān)已認(rèn)證APPID信息,閱讀并簽署《微信支付商戶號(hào)與APPID授權(quán)協(xié)議》,點(diǎn)擊“確認(rèn)”提交,發(fā)起授權(quán)申請(qǐng),如下圖:



      ?

      3、發(fā)起授權(quán)申請(qǐng)后,商戶需自行前往對(duì)應(yīng)平臺(tái)確認(rèn)授權(quán)申請(qǐng)。

      小程序:前往公眾平臺(tái),點(diǎn)擊“微信支付-商戶號(hào)管理”,查看相關(guān)商戶號(hào)信息,確認(rèn)授權(quán)申請(qǐng),或在“公眾平臺(tái)安全助手”下發(fā)的模板消息中確認(rèn)授權(quán)信息;

      公眾號(hào)/訂閱號(hào):前往公眾平臺(tái),點(diǎn)擊“微信支付-商戶號(hào)管理”,查看相關(guān)商戶號(hào)信息,確認(rèn)授權(quán)申請(qǐng);

      APP:前往開放平臺(tái),點(diǎn)擊“管理中心-查看-微信支付-商戶號(hào)管理”,查看相關(guān)商戶號(hào)信息,確認(rèn)授權(quán)申請(qǐng);



      ?

      4. 以上步驟綁定成功,可以實(shí)現(xiàn)微信支付功能。

      ?

      預(yù)先設(shè)置回調(diào)地址,商戶后臺(tái)設(shè)置開發(fā)的配置

      預(yù)先設(shè)置好回調(diào)地址后,方便支付成功后收到微信通知來處理業(yè)務(wù),設(shè)置也比較簡(jiǎn)單不用多說,如圖:



      ?

      根據(jù)自己的需求設(shè)置不同的回調(diào)地址。

      ?

      代碼實(shí)現(xiàn)統(tǒng)一支付

      1、統(tǒng)一支付,只要是微信公眾號(hào)平臺(tái)的同一主體都可以使用同一個(gè)支付,只需要在商戶后臺(tái)綁定APPID即可。

      微信小程序支付官方圖:



      ?

      微信支付文檔說明地址:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

      ?

      引用包:

      Senparc.Weixin.WxOpen

      Senparc.Weixin.TenPay

      ?

      注冊(cè)公眾號(hào),小程序信息
      services.AddSenparcGlobalServices(Configuration)
      .AddSenparcWeixinServices(Configuration);
      ?

      前端調(diào)用統(tǒng)一下單接口,獲取prepayId
      IRegisterService register = RegisterService.Start(env,
      senparcSetting.Value).UseSenparcGlobal(false, null);
      register.UseSenparcWeixin(senparcWeixinSetting.Value, senparcSetting.Value)
      .RegisterTenpayV3(senparcWeixinSetting.Value,"appid");
      ?

      部分前端代碼如下:



      ?

      ?



      ?

      后端部分代碼截圖獲取prepayId,如需代碼請(qǐng)與我聯(lián)系



      ?

      提交統(tǒng)一支付成功后,會(huì)出現(xiàn)如下圖:



      ?

      注:一般正常獲取到prepayid就可以發(fā)起支付,請(qǐng)確保所給的參數(shù)正確。

      ?

      微信支付回調(diào)

      微信支付回調(diào)規(guī)則如下:



      ?

      回調(diào)代碼實(shí)現(xiàn)
      ///<summary> /// 微信支付回調(diào)地址 /// </summary> /// <returns></returns> [HttpPost("
      PayNotifyUrl")] public ActionResult PayNotifyUrl() { ResponseResult result = new
      ResponseResult(); ResponseHandler resHandler= new ResponseHandler(HttpContext);
      string return_code = resHandler.GetParameter("return_code"); string return_msg
      = resHandler.GetParameter("return_msg"); try { var mch_key =
      Senparc.Weixin.Config.SenparcWeixinSetting.TenPayV3_Key;
      resHandler.SetKey(mch_key);var notifyXml = resHandler.ParseXML(); bool signFlag
      = resHandler.IsTenpaySign(); if (signFlag && return_code.ToUpper() == "SUCCESS"
      ) {string attach = resHandler.GetParameter("attach"); string device_info =
      resHandler.GetParameter("device_info"); string out_trade_no =
      resHandler.GetParameter("out_trade_no"); string transaction_id =
      resHandler.GetParameter("transaction_id"); string total_fee =
      resHandler.GetParameter("total_fee"); PayOrderNotifyParam param = new
      PayOrderNotifyParam() { PayNo= out_trade_no, Attach = attach, PayPrice = decimal
      .Parse(total_fee) /100, TransactionNo = transaction_id, }; //回調(diào)參數(shù)說明:
      https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3 //
      Logger.Info(string.Format("支付回調(diào)接收參數(shù)成功,notifyXml={0},param={1}", notifyXml,
      param.SerializeObject())); result = Service.PayNotifyUrl(param); if
      (result.errno !=0) { //回調(diào)處理邏輯失敗 Logger.Error(string.Format("
      支付回調(diào)處理失?。褐Ц秵翁?hào):{0},{1}", param.PayNo, result.errmsg)); } else { Logger.Info(
      string.Format("支付回調(diào)處理成功,支付單號(hào):{0}", param.PayNo)); string xml = string.Format(@"
      <xml> <return_code><![CDATA[{0}]]></return_code>
      <return_msg><![CDATA[{1}]]></return_msg> </xml>", return_code, return_msg);
      return Content(xml, "text/xml"); } } else { //錯(cuò)誤的訂單處理 Logger.Error(string
      .Format("支付回調(diào)接失敗,signFlag={0},notifyXml={1}", signFlag, notifyXml)); } } catch
      (Exception ex) { Logger.Error(string.Format("支付回調(diào)異常:Message={0},StackTrace={1}"
      , ex.Message, ex.StackTrace)); }return Content("fail", "text/xml"); }
      ?

      回調(diào)接口最好驗(yàn)證下簽名是否正確,驗(yàn)證簽名請(qǐng)先設(shè)置下商戶KEY,如簽名成功,微信支付成功,這時(shí)可以處理業(yè)務(wù)數(shù)據(jù)。

      ?

      注:如果業(yè)務(wù)處理成功最好返回SUCCESS告訴微信,否則微信會(huì)隔一段時(shí)間就會(huì)回調(diào)一次,直到回調(diào)次數(shù)用盡,這里也需要自己業(yè)務(wù)處理好狀態(tài)。

      ?

      總結(jié)

      以上流程就是微信支付過程,以上步驟由于一些隱私問題部分代碼采用了截圖,如有不明白之處請(qǐng)與我聯(lián)系,我們一起交流學(xué)習(xí),下一篇文章我們將實(shí)現(xiàn)微信退款功能。

      ?

      友情鏈接
      ioDraw流程圖
      API參考文檔
      OK工具箱
      云服務(wù)器優(yōu)惠
      阿里云優(yōu)惠券
      騰訊云優(yōu)惠券
      京東云優(yōu)惠券
      站點(diǎn)信息
      問題反饋
      郵箱:[email protected]
      QQ群:637538335
      關(guān)注微信

        <ul id="qxxfc"><fieldset id="qxxfc"><tr id="qxxfc"></tr></fieldset></ul>
          影音先锋中文字幕一区 | 大香蕉天天干 | 日本色色网| 大鸡巴在线视频观看 | 精品中文字幕视频 | 豆花操逼视频 | 操女人下面 | 欧美啪啪大片 | 昭和の肉体の一冢本 | 大香蕉久久一本网站 |