欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET Core 實(shí)現(xiàn)微信小程序支付功能(統(tǒng)一下單)

 更新時(shí)間:2019年09月11日 11:07:39   作者:hailang8  
最近公司研發(fā)了幾個(gè)電商小程序,還有一個(gè)核心的電商直播,只要是電商一般都會(huì)涉及到交易信息,離不開支付系統(tǒng),這里我們統(tǒng)一實(shí)現(xiàn)小程序的支付流程。感興趣的朋友跟隨小編一起看看吧

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

開通小程序的支付能力

開通小程序支付功能比較簡(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)頁面如圖:

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)微信退款功能。

以上所述是小編給大家介紹的.NET Core 實(shí)現(xiàn)微信小程序支付功能,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • asp.net mvc core管道及攔截器的理解

    asp.net mvc core管道及攔截器的理解

    這篇文章主要給大家介紹了關(guān)于asp.net mvc core管道及攔截器的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用asp.net mvc core具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • .NET Orm性能測(cè)試分析

    .NET Orm性能測(cè)試分析

    本篇文章給大家分享了.NET Orm性能測(cè)試的結(jié)果分析內(nèi)容,對(duì)此有需要的朋友可以參考學(xué)習(xí)下。
    2018-05-05
  • linq中的轉(zhuǎn)換操作符

    linq中的轉(zhuǎn)換操作符

    這篇文章介紹了linq中的轉(zhuǎn)換操作符,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • asp.net core3.1 引用的元包dll版本兼容性問題解決方案

    asp.net core3.1 引用的元包dll版本兼容性問題解決方案

    這篇文章主要介紹了asp.net core 3.1 引用的元包dll版本兼容性問題解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • 比較簡(jiǎn)單的將數(shù)據(jù)信息導(dǎo)入wrod文檔方案(C# for word)

    比較簡(jiǎn)單的將數(shù)據(jù)信息導(dǎo)入wrod文檔方案(C# for word)

    史上最簡(jiǎn)單將數(shù)據(jù)信息導(dǎo)入wrod文檔方案(C# for word)
    2010-01-01
  • .net core 靜態(tài)類獲取appsettings的方法

    .net core 靜態(tài)類獲取appsettings的方法

    這篇文章主要介紹了.net core 靜態(tài)類獲取appsettings的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 創(chuàng)建基于ASP.NET的SMTP郵件服務(wù)的具體方法

    創(chuàng)建基于ASP.NET的SMTP郵件服務(wù)的具體方法

    Asp.net在System.Web.Mail名稱空間中有一個(gè)發(fā)送email的內(nèi)建類,但這僅是cdosys的一個(gè)假象。開發(fā)者能使用一個(gè)替代的它smtp郵件服務(wù)。在這篇文章里面,我將會(huì)展示如何創(chuàng)建一個(gè)用于asp.net的功能齊全的smtp郵件服務(wù)
    2013-11-11
  • asp.net 文件下載實(shí)現(xiàn)代碼

    asp.net 文件下載實(shí)現(xiàn)代碼

    asp.net下實(shí)現(xiàn)文件下載的代碼。大家可以看下,主要包括文件名等操作。
    2009-04-04
  • 為ASP.NET MVC及WebApi添加路由優(yōu)先級(jí)

    為ASP.NET MVC及WebApi添加路由優(yōu)先級(jí)

    這是一個(gè)對(duì)Asp.Net Mvc的一個(gè)很小的功能拓展,小項(xiàng)目可能不太需要這個(gè)功能,但有時(shí)候項(xiàng)目大了注冊(cè)的路由不生效時(shí)你應(yīng)該要想到有可能是因?yàn)槁酚身樞虻脑?,這時(shí)這個(gè)路由優(yōu)先級(jí)的功能有可能就會(huì)給你帶來便利。
    2015-10-10
  • ASP.NET Core中調(diào)整HTTP請(qǐng)求大小的幾種方法詳解

    ASP.NET Core中調(diào)整HTTP請(qǐng)求大小的幾種方法詳解

    這篇文章主要給大家介紹了關(guān)于在ASP.NET Core中如何調(diào)整HTTP請(qǐng)求大小的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12

最新評(píng)論