一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - ASP.NET教程 - ASP.NET MVC 開發微信支付H5的實現示例(外置瀏覽器支付)

ASP.NET MVC 開發微信支付H5的實現示例(外置瀏覽器支付)

2020-06-23 14:37vanteking ASP.NET教程

這篇文章主要介紹了ASP.NET MVC 開發微信支付H5的實現示例(外置瀏覽器支付),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

H5支付是指商戶在微信客戶端外的移動端網頁展示商品或服務,用戶在前述頁面確認使用微信支付時,商戶發起本服務呼起微信客戶端進行支付。

主要用于觸屏版的手機瀏覽器請求微信支付的場景。可以方便的從外部瀏覽器喚起微信支付。

微信開放平臺上的也只是簡單的介紹了一下邏輯和常見問題,網上查看了很多,說的都不夠具體

首先需要在微信商戶平臺里開通 H5支付

申請入口:登錄商戶平臺-->產品中心-->我的產品-->支付產品-->H5支付

代碼邏輯:

1、用戶在商戶側完成下單,使用微信支付進行支付

2、由商戶后臺向微信支付發起下單請求(調用統一下單接口)注:交易類型trade_type=MWEB

3、統一下單接口返回支付相關參數給商戶后臺,如支付跳轉url(參數名“mweb_url”),商戶通過mweb_url調起微信支付中間頁

4、中間頁進行H5權限的校驗,安全性檢查

5、如支付成功,商戶后臺會接收到微信側的異步通知

6、用戶在微信支付收銀臺完成支付或取消支付,返回商戶頁面(默認為返回支付發起頁面)

7、商戶在展示頁面,引導用戶主動發起支付結果的查詢

8,9、商戶后臺判斷是否接到收微信側的支付結果通知,如沒有,后臺調用我們的訂單查詢接口確認訂單狀態

10、展示最終的訂單支付結果給用戶

我們需要用到的參數:

  • AppID(應用ID)
  • AppSecret(應用密鑰)
  • 微信支付商戶號
  • 微信商戶支付密鑰

我這里使用了第三方封裝的SDK。謝謝開發者SDK的幫助。

Senparc.Weixin

獻上地址:https://weixin.senparc.com/

H5支付其實就是生成一個鏈接,點擊后會激活微信APP,彈出支付窗口

所以需要生成一個符合規則的Url,引入SDK

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Com.Wxpay.WxPayConfig wxConfig = new Com.Wxpay.WxPayConfig();
    Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler(null);
    packageReqHandler.SetParameter("appid", wxConfig.appid);//APPID
    packageReqHandler.SetParameter("mch_id", wxConfig.mchid);//商戶號
    packageReqHandler.SetParameter("nonce_str", Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr());
    packageReqHandler.SetParameter("body", "測試商品");
    packageReqHandler.SetParameter("out_trade_no", model.OrderID);//訂單號
    packageReqHandler.SetParameter("total_fee", cost.ToString()); //金額,以分為單位
    packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress);//IP
    packageReqHandler.SetParameter("notify_url", "http://" + HttpContext.Request.Url.Host + "/WxPay/PayNotifyUrl"); //回調地址
    packageReqHandler.SetParameter("trade_type", "MWEB");//這個不可以改。固定為Mweb
    packageReqHandler.SetParameter("sign", packageReqHandler.CreateMd5Sign("key", wxConfig.key));
    string data = packageReqHandler.ParseXML();
    var urlFormat = "https://api.mch.weixin.qq.com/pay/unifiedorder";
    var formDataBytes = data == null ? new byte[0] : Encoding.UTF8.GetBytes(data);
    MemoryStream ms = new MemoryStream();
    ms.Write(formDataBytes, 0, formDataBytes.Length);
    ms.Seek(0, SeekOrigin.Begin);
    var result = RequestUtility.HttpPost(urlFormat, null, ms);
 
    var res = System.Xml.Linq.XDocument.Parse(result);
    string mweb_url = res.Element("xml").Element("mweb_url").Value;

然后我們會得到下面的Xml

?
1
2
3
4
5
6
7
8
9
10
11
12
<xml>
 <return_code><![CDATA[SUCCESS]]></return_code>
 <return_msg><![CDATA[OK]]></return_msg>
 <appid><![CDATA[wx***********]]></appid>
 <mch_id><![CDATA[1*******]]></mch_id>
 <nonce_str><![CDATA[4rN3Sy63EsAErTq7]]></nonce_str>
 <sign><![CDATA[0E34B9B750778540436A5CDF005212CF]]></sign>
 <result_code><![CDATA[SUCCESS]]></result_code>
 <prepay_id><![CDATA[wx201********************************]]></prepay_id>
 <trade_type><![CDATA[MWEB]]></trade_type>
 <mweb_url><![CDATA[https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=*******71655&package=1******9]]></mweb_url>
</xml>

提取到   mweb_url,綁定到href上即可。

<a href="https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=*******71655&package=1******9" rel="external nofollow" >立即支付</a>

支付成功之后,在回調地址里處理業務邏輯

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/// <summary>
/// 支付結果回調地址
/// </summary>
/// <returns></returns>
[HttpPost]
public virtual ActionResult PayNotifyUrl()
{
 
  Com.Wxpay.WxPayConfig wxConfig = new Com.Wxpay.WxPayConfig();
  Senparc.Weixin.MP.TenPayLibV3.ResponseHandler payNotifyRepHandler = new Senparc.Weixin.MP.TenPayLibV3.ResponseHandler(null);
  payNotifyRepHandler.SetKey(wxConfig.key);
 
  string return_code = payNotifyRepHandler.GetParameter("return_code");
  string return_msg = payNotifyRepHandler.GetParameter("return_msg");
  string xml = string.Format(@"<xml><return_code><![CDATA[{0}]]></return_code><return_msg><![CDATA[{1}]]></return_msg></xml>", return_code, return_msg);
 
  if (return_code.ToUpper() != "SUCCESS")
  {
    return Content(xml, "text/xml");
  }
 
  string out_trade_no = payNotifyRepHandler.GetParameter("out_trade_no");
  //微信服務器可能會多次推送到本接口,這里需要根據out_trade_no去查詢訂單是否處理,如果處理直接返回:return Content(xml, "text/xml"); 不跑下面代碼
 
  //驗證請求是否從微信發過來(安全)
  if (payNotifyRepHandler.IsTenpaySign())
  {
    //TO DO
  }
  else
  {
 
  }
  return Content(xml, "text/xml");
}

注意:

不要使用此url直接打開,會提示錯誤。

微信官方文檔地址:https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=15_1

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/vanteking/p/7275369.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女和男人差差 | 美女扒开胸罩露出奶 | 香蕉视频久久 | aⅴ天堂小视频 | 亚洲精品综合一区二区 | 亚洲精品成人在线 | 国产v在线在线观看羞羞答答 | 波多野结衣中文字幕在线 | 日本免费三区 | 无码区国产区在线播放 | 国产精品亚洲片在线va | 爽好舒服快想要免费看 | 小早川怜子在线播放精品 | 荡女淫春2古装 | 免费大片a一级一级 | 亚洲精品国产在线 | 波多野结衣家庭教师 | 国产香蕉一区二区精品视频 | 2021麻豆剧果冻传媒入口永久 | 国产欧美一区二区精品久久久 | 亚洲 欧美 日韩 综合 | 日本不卡高清免费v日本 | 国产青青操 | 亚洲成人国产精品 | 美女张开腿黄网站免费精品动漫 | 美女被扒开屁股进去网 | 男人使劲躁女人小视频 | 欧美一区精品 | 天堂漫画破解版 | 亚欧洲乱码视频一二三区 | 国产一页| 7788理论片在线观看 | 精品国产精品人妻久久无码五月天 | 亚洲偷窥图区色 | 国产成人在线视频 | 亚洲色图欧美图片 | 国产精品高清视亚洲一区二区 | 大学第一次基本都没了 | 逼逼流水了 | 日韩精品1 | 无码中文字幕热热久久 |