微信公眾號開發 (福利貼)(微信支付不得不說的坑)


  最近剛接觸的微信公眾號,看了半天的Api文檔,直接就上手開發了,用了幾天的時間,結束了公眾號支付的任務。

  首先,需要准備的東西是:1、微信公眾號;2、支付申請;3、公眾號配置(坑);4、開發。

  微信公眾號申請

  一般開通就行了,https://mp.weixin.qq.com,度娘一下就行了;此處可以省略;

  支付申請

  要繳費才給開通,之后上傳相關的資料,審核通過之后,一般一個多星期就能夠搞定;

  公眾號配置

  (1)【配置oAuth2網頁授權】,這個需要申請公眾號開發者【開發】-【接口權限】-【網頁授權】-【修改】-【網頁授權域名】 注意,該域名填寫,必須嚴格按照提示填寫,目前的格式是:域名(不帶http://或者https://),例如:www.baidu.com ,對了,這里只要是備案過的域名,不分一二級域名

  (2)【支付目錄配置】,這個分兩種【支付授權目錄】和【測試授權目錄】,第一種是正式的支付授權目錄,mvc框架的話,這種精確至Controller,例如:http://www.baidu.com/Pay/,第二種也跟前一種差不多,只是需要添加測試白名單;

  (3)開發中所需要的參數:

    MCHID:在【微信支付】-【商戶信息】-【基本信息】;

    APPID:【基本配置】-【開發者ID】-【】 ;

    APPSECRET:【基本配置】-【開發者ID】-【】 ;

    KEY:登錄商戶平台 【賬戶中心】-【API安全】-【設置密鑰】,自己設置的;

  做完以上的步驟,就可以開始開發了。

  下載官方的demo下載,但是WebForm版本的,其實,大體上是差不多的。

控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using WxPayAPI;

namespace MVC_WxPay_Demo.Controllers
{
    public class WxPayController : Controller
    {
        /// <summary>
        /// 調用js獲取收貨地址時需要傳入的參數
        /// 格式:json串
        /// 包含以下字段:
        /// appid:公眾號id
        /// scope: 填寫“jsapi_address”,獲得編輯地址權限
        /// signType:簽名方式,目前僅支持SHA1
        /// addrSign: 簽名,由appid、url、timestamp、noncestr、accesstoken參與簽名
        /// timeStamp:時間戳
        /// nonceStr: 隨機字符串
        /// </summary>
        public static string wxEditAddrParam { get; set; }
        /// <summary>
        /// openId
        /// </summary>
        public static string openid { get; set; }
        /// <summary>
        /// 授權后微信端返回的code(用於獲取openid和access_token)
        /// </summary>
        public static string code { get; set; }
        /// <summary>
        /// H5調起JS API參數
        /// </summary>
        public static string wxJsApiParam { get; set; }
        [AllowAnonymous]
        public ActionResult Index()
        {
       JsApiPay jsApiPay
= new JsApiPay(HttpContext); jsApiPay.GetOpenidAndAccessToken(); if (jsApiPay.openid != null) { openid = jsApiPay.openid; GetJsApiParameters(); } ViewBag.Params = wxJsApiParam; return View(); } /// <summary> /// 獲取前端參數 /// </summary> private void GetJsApiParameters() { if (openid != null) { //若傳遞了相關參數,則調統一下單接口,獲得后續相關接口的入口參數 JsApiPay jsApiPay = new JsApiPay(HttpContext); jsApiPay.openid = openid; jsApiPay.total_fee = 1; //1分錢 jsApiPay.attach = "test"; jsApiPay.goods_tag = "test"; jsApiPay.body = "body"; //jsapi支付預處理 try { WxPayData unifiedorderresult = jsApiPay.GetUnifiedOrderResult(); wxJsApiParam = jsApiPay.GetJsApiParameters();//獲取h5調起js api參數 } catch (Exception ex) { } } } /// <summary> /// 回調 /// </summary> public void Notify() { } } }

 

Index視圖

@{
    ViewBag.Title = "Pay";
}
<!DOCTYPE html>

<html>
<head>
    <title>@ViewBag.Title</title>
    <script type="text/javascript">

    //調用微信JS api 支付
    function onBridgeReady(){
        WeixinJSBridge.invoke(
            'getBrandWCPayRequest',@Html.Raw(ViewBag.Params) ,
            function(res){
                if (res.err_msg == "get_brand_wcpay_request:ok") {
                }     // 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在用戶支付成功后返回    ok,但並不保證它絕對可靠。
                else{
                }
                window.location.href='/WxPay/Notify';
            }
        );
    }
    if (typeof WeixinJSBridge == "undefined"){
        if( document.addEventListener ){
            document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
        }else if (document.attachEvent){
            document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
            document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
        }
    }else{
        onBridgeReady();
    }

    </script>
</head>
<body>
    <div>
    </div>
</body>
</html>

  Index()里面如何改,自己發揮,一定要保證通過身份驗證之后,微信回調能夠再次調用GetOpenidAndAccessToken()。

  之后,將需要用到的business文件夾中的JsApiPay.cs,NativeNotify.cs和utils文件夾中的Config.cs,Data.cs,HttpService.cs,Notify.cs,WxPayApi.cs 引用進來便可以了。

  貼完代碼,就要來說說里面的坑了,那些不得不說的坑,首先,要分清楚,HttpContext是什么鬼?如ajax請求,例如:用post或者get,http://xxx.com/WxPay/Index 這個的話,會出現微信帶Code參數的回調請求失敗,出現302,是因為微信通過身份驗證之后會回調設置好的redirect_url,同樣的用ajax去身份驗證的,回調也是用ajax, 然后會出現跨域的問題,所以,需要前端那邊用location直接跳轉新頁面到http://xxx.com/WxPay/Index ,切記,一定要跳轉新頁面!至於要帶什么參數,根據業務需要傳;至於還有什么其他坑.其實也不是坑,嚴格按照文檔走,類似鍵值對的順序、簽名的大小寫問題等等,這些也是需要注意的,不過好在微信返回的錯誤碼以及錯誤信息都是比較齊全跟明確的,查看文檔就可以繼續往下走。

  寫好這些,估計就沒什么問題了,有問題可以一起交流。

  最后,附上自己的寫的Demo,僅供參考:百度雲:MVC_WxPay_Demo.zip
                    Github:MVC_WxPay_Demo.zip

  覺得可以幫忙頂一下,謝謝。

    

  QQ交流群:523490820


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM