1. 程式人生 > >微信支付之公眾號支付

微信支付之公眾號支付

微信商戶申請開通:https://pay.weixin.qq.com/service_provider/index.shtml 注意:開通公眾賬號之後,然後根據流程開通相對應的商戶平臺 開發文件之場景介紹文件:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3
開發文件之模式1的流程圖:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4 開發之前所需要的引數: 1、APP ID ,應用ID(在公眾平臺--基本配置模組中) 2、APP Sercret ,應用祕鑰(在公眾平臺--基本配置模組中) 3、API Key,API的祕鑰(在商戶平臺--API安全中設定) 4、mchID , 商戶號(在公眾平臺---微信支付---商戶資訊) 5、order_api , 統一下單API的介面  6、notify_url    交易成功回撥的介面的URL 7、redirect_uri   JS網頁獲取code後重定向的地址  8、barcode_api
 物料二維碼 (就是自己的一個介面,生產的二維碼,比如我的連結) 開發配置: 1、配置微信支付的授權域名(要具體到介面的上一級,比如我的介面為:http://www.baidu.com/wallexxxx/api/jspai/xxxx.do),所以我的配置為:http://www.baidu.com/wallexxxx/api/jspai


2、這裡只要直接配置域名即可


3、這裡也是配置域名


開發流程: 2、在介面方法中,判斷是否含有code? 如果沒有code, 則重定向微信獲取code的URL連結(https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect),改URL當中引數說明。      appid:APP ID     後面的引數就不用更改了     引數說明:appid :APPID                      secret:APP  Secret                     code: 步驟2中獲取到的code       然後在這個方法當中,得到OPENID之後,再重定向到我們自己寫的A.html介面(讓使用者輸入金額的介面),並且把openID傳遞給A.html介面 4、使用者在A.html介面輸入完金額,點選支付的按鈕---- 這個時候請求介面xxxOrder.do (下單的介面)  5、伺服器在xxxOrder.do的介面中。呼叫微信公眾號支付的下單的API :https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1      構造好引數,並且傳Post提交,獲取該介面的返回值 6、將微信下單API返回的引數,儲存到資料庫,並且將部分值 (APPID,timeStamp(時間戳) ,nonceStr(隨機字串,不長於32位
),package ( 預支付交易會話標識),signType(MD5),paySign(MD5的簽名,就是將這裡所有的欄位組合成字串然後簽名))。 7、A.html請求xxxOrder.do的介面,得到返回資料,呼叫下面程式碼,來發起支付:
function onBridgeReady(){
   WeixinJSBridge.invoke(
       'getBrandWCPayRequest', {
           "appId" : "wx2421b1c4370ec43b",     //公眾號名稱,由商戶傳入     
           "timeStamp":" 1395712654",         //時間戳,自1970年以來的秒數     
           "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //隨機串     
           "package" : "prepay_id=u802345jgfjsdfgsdg888",     
           "signType" : "MD5",         //微信簽名方式:     
           "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信簽名 
       },
       function(res){     
           if(res.err_msg == "get_brand_wcpay_request:ok" ) {}     // 使用以上方式判斷前端返回,微信團隊鄭重提示:res.err_msg將在使用者支付成功後返回    ok,但並不保證它絕對可靠。 
       }
   ); 
}
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();
}

7、支付完成之後,會進入到5中呼叫微信下單API中,引數中設定的回撥的URL引數。 改引數肯定也是我自己後臺的xxxx.do的介面。在這個方法當中,參考:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_2   可以得到我們需要的引數,根據 商戶訂單號----out_trade_no 可以來更新資料庫的表,並且推送給APP訊息!