最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ASP.NET MVC 開發(fā)微信支付H5的實(shí)現(xiàn)示例(外置瀏覽器支付)

 更新時(shí)間:2019年12月16日 10:02:12   作者:vanteking  
這篇文章主要介紹了ASP.NET MVC 開發(fā)微信支付H5的實(shí)現(xiàn)示例(外置瀏覽器支付),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

H5支付是指商戶在微信客戶端外的移動(dòng)端網(wǎng)頁(yè)展示商品或服務(wù),用戶在前述頁(yè)面確認(rèn)使用微信支付時(shí),商戶發(fā)起本服務(wù)呼起微信客戶端進(jìn)行支付。

主要用于觸屏版的手機(jī)瀏覽器請(qǐng)求微信支付的場(chǎng)景??梢苑奖愕膹耐獠繛g覽器喚起微信支付。

微信開放平臺(tái)上的也只是簡(jiǎn)單的介紹了一下邏輯和常見問題,網(wǎng)上查看了很多,說的都不夠具體

首先需要在微信商戶平臺(tái)里開通 H5支付

申請(qǐng)入口:登錄商戶平臺(tái)-->產(chǎn)品中心-->我的產(chǎn)品-->支付產(chǎn)品-->H5支付

代碼邏輯:

1、用戶在商戶側(cè)完成下單,使用微信支付進(jìn)行支付

2、由商戶后臺(tái)向微信支付發(fā)起下單請(qǐng)求(調(diào)用統(tǒng)一下單接口)注:交易類型trade_type=MWEB

3、統(tǒng)一下單接口返回支付相關(guān)參數(shù)給商戶后臺(tái),如支付跳轉(zhuǎn)url(參數(shù)名“mweb_url”),商戶通過mweb_url調(diào)起微信支付中間頁(yè)

4、中間頁(yè)進(jìn)行H5權(quán)限的校驗(yàn),安全性檢查

5、如支付成功,商戶后臺(tái)會(huì)接收到微信側(cè)的異步通知

6、用戶在微信支付收銀臺(tái)完成支付或取消支付,返回商戶頁(yè)面(默認(rèn)為返回支付發(fā)起頁(yè)面)

7、商戶在展示頁(yè)面,引導(dǎo)用戶主動(dòng)發(fā)起支付結(jié)果的查詢

8,9、商戶后臺(tái)判斷是否接到收微信側(cè)的支付結(jié)果通知,如沒有,后臺(tái)調(diào)用我們的訂單查詢接口確認(rèn)訂單狀態(tài)

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

我們需要用到的參數(shù):

  • AppID(應(yīng)用ID)
  • AppSecret(應(yīng)用密鑰)
  • 微信支付商戶號(hào)
  • 微信商戶支付密鑰

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

Senparc.Weixin

獻(xiàn)上地址:https://weixin.senparc.com/

H5支付其實(shí)就是生成一個(gè)鏈接,點(diǎn)擊后會(huì)激活微信APP,彈出支付窗口

所以需要生成一個(gè)符合規(guī)則的Url,引入SDK

      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);//商戶號(hào)
          packageReqHandler.SetParameter("nonce_str", Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr());
          packageReqHandler.SetParameter("body", "測(cè)試商品");
          packageReqHandler.SetParameter("out_trade_no", model.OrderID);//訂單號(hào)
          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"); //回調(diào)地址
          packageReqHandler.SetParameter("trade_type", "MWEB");//這個(gè)不可以改。固定為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;

然后我們會(huì)得到下面的Xml

<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 rel="external nofollow" >立即支付</a>

支付成功之后,在回調(diào)地址里處理業(yè)務(wù)邏輯

    /// <summary>
    /// 支付結(jié)果回調(diào)地址
    /// </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");
      //微信服務(wù)器可能會(huì)多次推送到本接口,這里需要根據(jù)out_trade_no去查詢訂單是否處理,如果處理直接返回:return Content(xml, "text/xml"); 不跑下面代碼

      //驗(yàn)證請(qǐng)求是否從微信發(fā)過來(安全)
      if (payNotifyRepHandler.IsTenpaySign())
      {
        //TO DO
      }
      else
      {

      }
      return Content(xml, "text/xml");
    }

注意:

不要使用此url直接打開,會(huì)提示錯(cuò)誤。

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JAVA正則表達(dá)式 Pattern和Matcher

    JAVA正則表達(dá)式 Pattern和Matcher

    java.util.regex是一個(gè)用正則表達(dá)式所訂制的模式來對(duì)字符串進(jìn)行匹配工作的類庫(kù)包。
    2009-04-04
  • .NET Core自定義項(xiàng)目模板的全過程

    .NET Core自定義項(xiàng)目模板的全過程

    這篇文章主要給大家介紹了關(guān)于.NET Core自定義項(xiàng)目模板的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • asp.net+js實(shí)現(xiàn)的ajax sugguest搜索提示效果

    asp.net+js實(shí)現(xiàn)的ajax sugguest搜索提示效果

    阿會(huì)楠根據(jù)網(wǎng)上一份原作者不詳?shù)拇a進(jìn)行了修改,以適合自己的項(xiàng)目并增加了多個(gè)功能。此次放出的代碼為基本實(shí)現(xiàn)代碼,也是最接近原來的代碼,略去其他功能。版權(quán)歸原作者所有。
    2009-04-04
  • WPF圖形解鎖控件ScreenUnLock使用詳解

    WPF圖形解鎖控件ScreenUnLock使用詳解

    這篇文章主要為大家詳細(xì)介紹了WPF圖形解鎖控件ScreenUnLock的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • .NET?6實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的示例詳解

    .NET?6實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用.NET?6實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以了解一下
    2022-11-11
  • Repeater控件動(dòng)態(tài)變更列(Header,Item和Foot)信息(重構(gòu)cs)

    Repeater控件動(dòng)態(tài)變更列(Header,Item和Foot)信息(重構(gòu)cs)

    上一篇雖然它算不上是完全動(dòng)態(tài)化,但它已經(jīng)達(dá)到初期想要的效果,現(xiàn)另開一篇,不是重新另外寫,而是想重構(gòu)cs的代碼,因?yàn)榍耙黄拇a雖然簡(jiǎn)單,但代碼冗余過多,感興趣的朋友可以參考下哈
    2013-03-03
  • asp.net fileupload 實(shí)現(xiàn)上傳

    asp.net fileupload 實(shí)現(xiàn)上傳

    在vs的視圖模式下,添加上傳組件,以及添加一個(gè)按鈕button,隨后在后置代碼中加入如下信息
    2009-05-05
  • Asp.Net Core Web應(yīng)用程序—探索

    Asp.Net Core Web應(yīng)用程序—探索

    這篇文章主要介紹了Asp.Net Core Web應(yīng)用程序—探索,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Asp.Net設(shè)計(jì)模式之單例模式詳解

    Asp.Net設(shè)計(jì)模式之單例模式詳解

    這篇文章主要為大家詳細(xì)介紹了Asp.Net設(shè)計(jì)模式之單例模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • .NET使用StackTrace獲取方法調(diào)用信息的代碼演示

    .NET使用StackTrace獲取方法調(diào)用信息的代碼演示

    StackTrace, 位于 System.Diagnostics 命名空間下,名字很直觀,它代表一個(gè)方法調(diào)用的跟蹤堆棧,里面存放著按順序排列的棧幀對(duì)象(StackFrame),每當(dāng)發(fā)生一次調(diào)用,就會(huì)壓入一個(gè)棧幀,這篇文章主要介紹了.NET使用StackTrace獲取方法調(diào)用信息,需要的朋友可以參考下
    2022-09-09

最新評(píng)論

新余市| 宿迁市| 奉新县| 固原市| 乌什县| 哈巴河县| 建德市| 沙田区| 犍为县| 泗洪县| 马尔康县| 林甸县| 广东省| 乐安县| 武邑县| 清河县| 东乌珠穆沁旗| 体育| 太仓市| 临颍县| 南召县| 漯河市| 鄯善县| 白朗县| 崇仁县| 金秀| 科尔| 永新县| 南投县| 门源| 章丘市| 进贤县| 莱阳市| 罗甸县| 双桥区| 安达市| 工布江达县| 巴楚县| 九龙城区| 湘潭市| 南充市|