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

微信JSAPI支付操作需要注意的細(xì)節(jié)

 更新時間:2017年01月10日 09:51:13   作者:huangenai  
這篇文章主要介紹了微信JSAPI支付中所遇到的那些坑,具有一定的參考價值,感興趣的小伙伴們可以參考一下

首先介紹一下我在調(diào)用微信支付接口使用的是 weixin.senparc SDK,非常方便好用開源的一個微信開發(fā)SDK。

weixin.senparc SDK 官網(wǎng):http://weixin.senparc.com/

先去下載下來Senparc.Weixin SDK。

在調(diào)起支付接口之前,需要先要調(diào)用統(tǒng)一下單接口,商戶系統(tǒng)先調(diào)用該接口在微信支付服務(wù)后臺生成預(yù)支付交易單,返回正確的預(yù)支付交易回話標(biāo)識后再在APP里面調(diào)起支付。

 微信 JsApi支付 在這個目錄下 Senparc.Weixin.MP.Sample.Controllers 找到JsApi支付。

public ActionResult JsApi(string code, string state)
  {
   if (string.IsNullOrEmpty(code))
   {
    return Content("您拒絕了授權(quán)!");
   }

   if (!state.Contains("|"))
   {
    //這里的state其實是會暴露給客戶端的,驗證能力很弱,這里只是演示一下
    //實際上可以存任何想傳遞的數(shù)據(jù),比如用戶ID,并且需要結(jié)合例如下面的Session["OAuthAccessToken"]進(jìn)行驗證
    return Content("驗證失?。≌垙恼?guī)途徑進(jìn)入!1001");
   }
   try
   {


    //獲取產(chǎn)品信息
    var stateData = state.Split('|');
    int productId = 0;
    ProductModel product = null;
    if (int.TryParse(stateData[0], out productId))
    {
     int hc = 0;
     if (int.TryParse(stateData[1], out hc))
     {
      var products = ProductModel.GetFakeProductList();
      product = products.FirstOrDefault(z => z.Id == productId);
      if (product == null || product.GetHashCode() != hc)
      {
       return Content("商品信息不存在,或非法進(jìn)入!1002");
      }
      ViewData["product"] = product;
     }
    }

    //通過,用code換取access_token
    var openIdResult = OAuthApi.GetAccessToken(TenPayV3Info.AppId, TenPayV3Info.AppSecret, code);
    if (openIdResult.errcode != ReturnCode.請求成功)
    {
     return Content("錯誤:" + openIdResult.errmsg);
    }

    string sp_billno = Request["order_no"];
    if (string.IsNullOrEmpty(sp_billno))
    {
     //生成訂單10位序列號,此處用時間和隨機數(shù)生成,商戶根據(jù)自己調(diào)整,保證唯一
     sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId, DateTime.Now.ToString("yyyyMMdd"),
      TenPayV3Util.BuildRandomStr(10));
    }
    else
    {
     sp_billno = Request["order_no"];
    }

    var timeStamp = TenPayV3Util.GetTimestamp();
    var nonceStr = TenPayV3Util.GetNoncestr();

    var body = product == null ? "test" : product.Name;
    var price = product == null ? 100 : product.Price * 100;
    var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, Request.UserHostAddress, TenPayV3Info.TenPayV3Notify, TenPayV3Type.JSAPI, openIdResult.openid, TenPayV3Info.Key, nonceStr);
    var result = TenPayV3.Unifiedorder(xmlDataInfo);//調(diào)用統(tǒng)一訂單接口

    //JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);
    var package = string.Format("prepay_id={0}", result.prepay_id);

    ViewData["appId"] = TenPayV3Info.AppId;
    ViewData["timeStamp"] = timeStamp;
    ViewData["nonceStr"] = nonceStr;
    ViewData["package"] = package;
    ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

    return View();
   }
   catch (Exception ex)
   {
    var msg = ex.Message;
    msg += "<br>" + ex.StackTrace;
    msg += "<br>==Source==<br>" + ex.Source;

    if (ex.InnerException != null)
    {
     msg += "<br>===InnerException===<br>" + ex.InnerException.Message;
    }
    return Content(msg);
   }
  }

先在微信服務(wù)后臺生成預(yù)支付交易單,獲得預(yù)支付訂單號。

先說說在統(tǒng)一下單這里遇到的坑。 

1.在統(tǒng)一下單的時候解析返回結(jié)果,一直出現(xiàn)以下問題:您沒有JSAPI支付權(quán)限

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[您沒有JSAPI支付權(quán)限]]></return_msg>
</xml>

1)先看看你的公眾號微信支付設(shè)置是否正確。

關(guān)于如何配置微信支付:可以參考這個 http://jingyan.baidu.com/article/77b8dc7fef360d6174eab690.html

2)檢查你的授權(quán)目錄是否正確,格式要這樣,后面記得別漏了一個/   例如:http://test.cn/u/

3)檢查需要傳過去的賬戶參數(shù),上公眾號還有商戶號檢查你的賬戶參數(shù)是否正確。我在開發(fā)當(dāng)中就出現(xiàn),微信公眾號商戶號,appid 是分別不同兩個公眾號的,坑啊,找了好久,覺得不對勁,原來是給的配置參數(shù)密鑰不對。

 這里詳細(xì)說一下對應(yīng)的參數(shù):

MCHID:商戶號(必須配置,開戶郵件中可查看),商戶申請微信支付后,由微信支付分配的商戶收款賬號。
APPID:微信開放平臺審核通過的應(yīng)用APPID,appid是微信公眾賬號或開放平臺APP的唯一標(biāo)識,在公眾平臺申請公眾賬號或者在開放平臺申請APP賬號后,微信會自動分配對應(yīng)的appid用于標(biāo)識該應(yīng)用??稍谖⑿殴娖脚_-->開發(fā)者中心查看,商戶的微信支付審核通過郵件中也會包含該字段值.

KEY:商戶支付密鑰,參考開戶郵件設(shè)置(必須配置,登錄商戶平臺自行設(shè)置),交易過程生成簽名的密鑰,僅保留在商戶系統(tǒng)和微信支付后臺,不會在網(wǎng)絡(luò)中傳播。商戶妥善保管該Key,切勿在網(wǎng)絡(luò)中傳輸,不能在其他客戶端中存儲,保證key不會被泄漏。商戶可根據(jù)郵件提示登錄微信商戶平臺進(jìn)行設(shè)置。也可按一下路徑設(shè)置:微信商戶平臺(pay.weixin.qq.com)-->賬戶設(shè)置-->API安全-->密鑰設(shè)置.
APPSECRET:公眾帳號secert(僅JSAPI支付的時候需要配置, 登錄公眾平臺,進(jìn)入開發(fā)者中心可設(shè)置)

 2.在統(tǒng)一下單,解析返回來的結(jié)果我出現(xiàn)了商戶號mch_id與appid不匹配這個問題

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[商戶號mch_id與appid不匹配]]></return_msg>
</xml>

原因是我拿到的商戶號不是這個公眾號的。一定要檢查是不是這個公眾號的商戶號。

 3.在統(tǒng)一下單,解析返回來的結(jié)果出現(xiàn) appid and openid not match,appid和openid不匹配。

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[appid and openid not match]]></return_msg>
</xml>

原因是我這個用戶的openid 不是這個公眾號的 

4.在統(tǒng)一下單,解析返回來的結(jié)果出現(xiàn) CDATA[openid is invalid],openid無效

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[openid is invalid]]></return_msg>
</xml>

原因是,傳過去不是有效的opendid。不小心看錯了,把用戶id 當(dāng)做openid傳過去了。

當(dāng)統(tǒng)一下單成功,會返回以下格式的參數(shù)

<xml>
 <return_code><![CDATA[SUCCESS]]></return_code>
 <return_msg><![CDATA[OK]]></return_msg>
 <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
 <mch_id><![CDATA[10000100]]></mch_id>
 <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
 <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
 <result_code><![CDATA[SUCCESS]]></result_code>
 <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
 <trade_type><![CDATA[APP]]></trade_type>
</xml>

解析獲得預(yù)支付單號:

string prepayId = res.Element("xml").Element("prepay_id").Value; //獲取預(yù)支付訂單號

給頁面對應(yīng)地參數(shù)

 ViewData["appId"] = TenPayV3Info.AppId;
    ViewData["timeStamp"] = timeStamp;
    ViewData["nonceStr"] = nonceStr;
    ViewData["package"] = package;
    ViewData["paySign"] = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

靜態(tài)頁面js調(diào)用:

wx.chooseWXPay({
 timestamp: 0, // 支付簽名時間戳,注意微信jssdk中的所有使用timestamp字段均為小寫。但最新版的支付后臺生成簽名使用的timeStamp字段名需大寫其中的S字符
 nonceStr: '', // 支付簽名隨機串,不長于 32 位
 package: '', // 統(tǒng)一支付接口返回的prepay_id參數(shù)值,提交格式如:prepay_id=***)
 signType: '', // 簽名方式,默認(rèn)為'SHA1',使用新版支付需傳入'MD5'
 paySign: '', // 支付簽名
 success: function (res) {
  if (res.err_msg == "get_brand_wcpay_request:ok") {//支付成功
 
  } else {
   //支付失敗

  }
  // 使用以上方式判斷前端返回,微信團(tuán)隊鄭重提示:res.err_msg將在用戶支付成功后返回ok,但并不保證它絕對可靠。
 }
});

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

相關(guān)文章

  • webpack-cli在webpack打包中的作用小結(jié)

    webpack-cli在webpack打包中的作用小結(jié)

    webpack?是打包代碼時依賴的核心內(nèi)容,而?webpack-cli?是一個用來在命令行中運行?webpack?的工具,那么webpack-cli在webpack打包中的作用是什么,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2022-04-04
  • 使用JS取得焦點(focus)元素代碼

    使用JS取得焦點(focus)元素代碼

    這篇文章主要介紹了使用JS取得焦點(focus)元素的具體實現(xiàn),需要的朋友可以參考下
    2014-03-03
  • 輕松學(xué)習(xí)Javascript閉包函數(shù)

    輕松學(xué)習(xí)Javascript閉包函數(shù)

    這篇文章主要幫助大家輕松學(xué)習(xí)掌握J(rèn)avascript閉包函數(shù),從閉包的含義出發(fā),由淺入深學(xué)習(xí)Javascript閉包函數(shù),感興趣的小伙伴們可以參考一下
    2015-12-12
  • JS 實現(xiàn)圖片直接下載示例代碼

    JS 實現(xiàn)圖片直接下載示例代碼

    本文為大家詳細(xì)介紹下使用JS實現(xiàn)圖片直接下載,具體實現(xiàn)代碼如下,感興趣的朋友可以參考下哈,希望對大家有所幫助
    2013-07-07
  • 微信小程序?qū)崙?zhàn)篇之購物車的實現(xiàn)代碼示例

    微信小程序?qū)崙?zhàn)篇之購物車的實現(xiàn)代碼示例

    本篇文章主要介紹了微信小程序?qū)崙?zhàn)篇之購物車的實現(xiàn)代碼示例,詳細(xì)的介紹了購物車的功能實現(xiàn),具有一定的參考價值,有興趣的可以了解一下
    2017-11-11
  • JavaScript適配器模式原理與用法實例詳解

    JavaScript適配器模式原理與用法實例詳解

    這篇文章主要介紹了JavaScript適配器模式原理與用法,結(jié)合具體實例形式詳細(xì)分析了JavaScript適配器模式概念、原理、使用方法與操作注意事項,需要的朋友可以參考下
    2020-03-03
  • JS字符串常用操作方法實例小結(jié)

    JS字符串常用操作方法實例小結(jié)

    這篇文章主要介紹了JS字符串常用操作方法,結(jié)合實例形式總結(jié)分析了javascript字符串獲取、返回、拼接、替換、搜索、計算等相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06
  • 如何使用JS獲取當(dāng)前節(jié)點的兄弟/父/子節(jié)點

    如何使用JS獲取當(dāng)前節(jié)點的兄弟/父/子節(jié)點

    在日常的網(wǎng)頁開發(fā)中,我們會遇到獲取節(jié)點的問題,而js是寫網(wǎng)頁的最基礎(chǔ)的語言,也是最常用的,這篇文章主要給大家介紹了關(guān)于如何使用JS獲取當(dāng)前節(jié)點的兄弟/父/子節(jié)點的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • JS仿QQ好友列表展開、收縮功能(第一篇)

    JS仿QQ好友列表展開、收縮功能(第一篇)

    這篇文章主要介紹了JS仿QQ好友列表展開、收縮功能(第一篇),需要的朋友可以參考下
    2017-07-07
  • 使用JS實現(xiàn)圖片展示瀑布流效果(簡單實例)

    使用JS實現(xiàn)圖片展示瀑布流效果(簡單實例)

    下面小編就為大家?guī)硪黄褂肑S實現(xiàn)圖片展示瀑布流效果(簡單實例)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09

最新評論