微信jsapi支付對接

微信jsapi對接首先需要獲取code傳給後臺以獲取用戶的openid

剛進入頁面需要判斷是否是在微信app內部打開你頁面的連接
var is_weixin = (function(){return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1})();
當頁面加載完成(){
  if(is_weixin){
    this.isLink()
  }
}
爲什麼要獲取code?
package:統一下單接口返回的prepay_id參數值,提交格式如:prepay_id=***
prepay_id = code(前端獲取)——>openid(後臺拿code去獲取openid)——>prepay_id(後臺拿openid再去獲取prepay_id)

//判斷鏈接 跳轉微信回調以獲取code
isLink(){
            var self = this;
            // alert(self.urlAll)
            //self.urlAll = window.location.href
            if(self.urlAll.indexOf('code=')=='-1'){
		//需要換成自己公司的appid	
                var appId = "111111111";
                var redirect_uri = window.location.origin + window.location.pathname;            
		//這個鏈接的格式是固定的 參數換爲自己的即可,訪問之後微信會在redirect_uri後自動拼接code
		//如你自己的地址爲a.com 則訪問這個頁面後地址會變爲a.com?code=xxx  只能在微信內打開有效 
                //encodeURIComponent是對url的地址進行urlEncode處理(微信需求)

		window.location.replace("https://open.weixin.qq.com/connect/oauth2/authorize?appid="+appId+"&redirect_uri="+encodeURIComponent(self.urlAll)+"&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect")
            }else{
 		//這裏是獲取code傳給後臺,來換取預支付id
                 this.code = this.getUrlParam('code')
		//調用後臺的pay方法
		//這裏是後臺寫的支付接口,不一定只是傳個code,可能會根據業務需要傳其他參數,總之讓你傳啥傳啥,調用成功後直接調取後面的 wxInnerPay()方法即可
		this.pay(code)
            }
        },
//這個是獲取地址欄中的參數
getUrlParam(name) {
            var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i');
            console.log( window.location.search)
            var r = window.location.href.split('?')[1].match(reg);
            if (r != null) {
            return unescape(r[2]);
            }
            return null;
        },
  <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
//這裏切記,頁面js一定要引入微信的jsapi,如上
//下面的兩個方法內部基本不用動,原樣粘上即可
//微信內吊起支付
        wxInnerPay(res) {
	    //res的基本數據我用圖給你們看一下 暫放在代碼底部
            const pay_params = res
            console.log(res)
            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{
                    console.log('onBridgeReady')
                    this.onBridgeReady(pay_params);
            }
        },
        onBridgeReady(params) {
            const pay_params = params;
            const self = this;
            console.log(params)
            WeixinJSBridge.invoke(
                'getBrandWCPayRequest', {
                    "appId": pay_params.appId,  //公衆號名稱,由商戶傳入     
                    "timeStamp": pay_params.timeStamp,  //時間戳,自1970年以來的秒數     
                    "nonceStr": pay_params.nonceStr,  //隨機串     
                    "package": pay_params.package,     
                    "signType": pay_params.signType,  //微信簽名方式:     
                    "paySign": pay_params.sign  //微信簽名 
                },
                function(res){
                    console.log(res)
                    if(res.err_msg == "get_brand_wcpay_request:ok" ){
                        // self.queryThirdOrder(3)
                    } 
            }); 
        },

下面是res的基本字段
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章