微信公眾號(hào)H5支付(前端部分)筆記

說明

本文試圖說明的是在微信環(huán)境中、前端部分調(diào)起H5支付的場(chǎng)景歹撒,需要區(qū)別于一般H5瀏覽器中調(diào)起和純公眾號(hào)內(nèi)調(diào)起的場(chǎng)景。
前期準(zhǔn)備:公眾號(hào)支付開發(fā)步驟
文檔地址:微信內(nèi)H5調(diào)起支付
請(qǐng)自行區(qū)別于:H5支付

步驟

1. 開發(fā)之前:

參考資料:公眾號(hào)支付介紹

  1. 首先需要一個(gè)類型為服務(wù)號(hào)(政府或媒體訂閱號(hào))并完成微信認(rèn)證的公眾號(hào)诊胞;
  2. 提交資料為這個(gè)公眾號(hào)申請(qǐng)一個(gè)商戶賬號(hào)栈妆,并通過審核;
  3. 用申請(qǐng)商戶賬號(hào)的微信登錄微信商戶平臺(tái)厢钧,
    賬戶設(shè)置->API安全,依次下載安裝安全控件和操作證書嬉橙。
    注意:每次安裝后需要重啟瀏覽器重新登錄早直。另外在Mac系統(tǒng)上,僅支持使用Safari市框,不能使用Chrome霞扬。
  4. 用申請(qǐng)商戶賬號(hào)的微信登錄微信商戶平臺(tái),產(chǎn)品中心->我的產(chǎn)品枫振,開通“公眾號(hào)支付”功能喻圃。
  5. 請(qǐng)記錄公眾號(hào)的appId、appSecret粪滤,商戶賬號(hào)的mch_id(純數(shù)字)斧拍、API密鑰key。

2. 微信中的安全域名設(shè)置:

  1. 在微信公眾號(hào)中杖小,公眾號(hào)設(shè)置->功能設(shè)置->網(wǎng)頁授權(quán)域名肆汹,需要加入支付頁面的域名愚墓。格式類似:“wechat.meiyue.com”,不需要協(xié)議名昂勉,不需要斜杠結(jié)尾浪册,不需要二級(jí)目錄。
  2. 在商戶平臺(tái)中岗照,產(chǎn)品中心->開發(fā)配置->支付配置->公眾號(hào)支付->支付授權(quán)目錄村象,需要添加支付頁面的域名。格式類似:“http://wechat.meiyue.com/”攒至,需要選擇協(xié)議厚者,需要以斜杠結(jié)尾,不需要二級(jí)目錄嗓袱。這一設(shè)置更新后在10分鐘內(nèi)生效籍救。

3. 流程整理

  1. 為了獲得公眾號(hào)的授權(quán),微信要求不能直接將網(wǎng)址發(fā)給用戶渠抹,而要發(fā)出一個(gè)經(jīng)過公眾號(hào)處理的網(wǎng)址蝙昙,而真實(shí)網(wǎng)址則作為redire_url發(fā)出。微信規(guī)定的網(wǎng)址為:

    `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${true_url}&response_type=code&scope=${'snsapi_userinfo'}&state=${STATE}#wechat_redirect`
    

    其中:

    • true_url:支付頁面的實(shí)際地址梧却;
    • scope:如果僅需要用戶的open_id奇颠,可以使用snsapi_base靜默授權(quán),否則使用snsapi_userinfo放航;
    • state:可選參數(shù)烈拒,可以帶到實(shí)際網(wǎng)頁中的參數(shù),需要進(jìn)行URI轉(zhuǎn)碼广鳍。希望獲取?order_id=123荆几,需要寫成state=${encodeURIComponent('order_id=123')},實(shí)際頁面拿到的字符為:&state=order_id%3D123赊时,然后需要在頁面自行提取吨铸。
  2. 用戶點(diǎn)擊微信重定向網(wǎng)址后,經(jīng)過確認(rèn)授權(quán)或靜默授權(quán)祖秒,跳轉(zhuǎn)到實(shí)際支付頁面诞吱,同時(shí)獲取到公眾號(hào)提供的CODE。網(wǎng)址格式類似于:

    'http://wechat.meiyue.com/meiyue/weChatPay.html?code=081OfePZ0VzkRZ15uNRZ0MRaPZ0OfePI&state=order_id%3D123'
    // `${true_url}?code=${CODE}&state=${STATE}`
    
  3. 一堆請(qǐng)求的流程說明:
    在頁面中竭缝,需要用code請(qǐng)求用戶的open_id房维,再用open_id交給服務(wù)器發(fā)起訂單或查詢訂單,換取訂單信息prepay_id抬纸。
    (實(shí)際操作中咙俩,因?yàn)閛pen_id請(qǐng)求prepay_id的行為只能由服務(wù)器發(fā)起,所以這里的處理是前端向服務(wù)器發(fā)送code松却,由服務(wù)器進(jìn)行請(qǐng)求暴浦,最后返回訂單信息溅话。)
    參考資料:微信網(wǎng)頁授權(quán)
    如果不需要用戶的具體信息(用戶名頭像什么的),到文檔第三步就OK了歌焦。

  4. 頁面中的處理:weChatPay.html
    如果不使用微信環(huán)境飞几,則需要在頁面中引入微信JS-SDK腳本,自行配置config独撇,然后才能使用微信提供的接口屑墨。
    而在當(dāng)前場(chǎng)景中,微信瀏覽器中已經(jīng)注入了相關(guān)代碼纷铣,直接使用就好:

wechatPay.html中的示例代碼

// 后端提供的訂單信息:
let data = {...}

function onBridgeReady(){
   WeixinJSBridge.invoke(
      'getBrandWCPayRequest', {
          "appId": data.appid, //公眾號(hào)名稱卵史,由商戶傳入 ok
          "timeStamp": data.timestamp, //時(shí)間戳,自1970年以來的秒數(shù) ok    
          "nonceStr": data.noncestr, //隨機(jī)串     
          "package": "prepay_id=" + data.prepayid,
          "signType": "MD5", //微信簽名方式    
          "paySign": data.sign //微信簽名 
        },
      function(res){
      if(res.err_msg == "get_brand_wcpay_request:ok" ){
      // 使用以上方式判斷前端返回,微信團(tuán)隊(duì)鄭重提示:
            //res.err_msg將在用戶支付成功后返回ok搜立,但并不保證它絕對(duì)可靠以躯。
        console.log('支付成功!')
      } 
   }); 
}
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();
}

遇到的問題:

1. 關(guān)于微信開發(fā)者工具

網(wǎng)頁跳轉(zhuǎn)可以使用微信開發(fā)者工具測(cè)試啄踊,但是最后的調(diào)起支付方法不能測(cè)忧设。控制臺(tái)報(bào)錯(cuò):errMsg:"chooseWXPay:fail, the permission value is offline verifying"颠通,翻譯過來是不能離線授權(quán)址晕。這很正常,微信開發(fā)者工具沒有錢包顿锰。

2. 支付簽名錯(cuò)誤

需要檢查的地方有:

  1. 前后端使用的參數(shù)名大小寫是否一致谨垃?
    公眾號(hào)支付中使用駝峰寫法(appId),而H5中使用小寫(appid)硼控。
  2. 使用的信息是否一致刘陶?
    一個(gè)公眾號(hào)可以注冊(cè)多個(gè)商戶號(hào),請(qǐng)檢查基本信息是否一致牢撼。
  3. 后端計(jì)算的簽名是否正確易核?
    微信支付接口簽名校驗(yàn)工具
    微信公眾平臺(tái)支付接口調(diào)試工具

3. 當(dāng)前頁面的URL未注冊(cè)

肯定是授權(quán)域名、安全域名什么的寫錯(cuò)了浪默,請(qǐng)返回上文中的“ 2. 微信中的安全域名設(shè)置”。當(dāng)然也有可能是配錯(cuò)了公眾號(hào)或商戶號(hào)缀匕。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末纳决,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乡小,更是在濱河造成了極大的恐慌阔加,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件满钟,死亡現(xiàn)場(chǎng)離奇詭異胜榔,居然都是意外死亡胳喷,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門夭织,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吭露,“玉大人,你說我怎么就攤上這事尊惰〗哺停” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵弄屡,是天一觀的道長(zhǎng)题禀。 經(jīng)常有香客問我,道長(zhǎng)膀捷,這世上最難降的妖魔是什么迈嘹? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮全庸,結(jié)果婚禮上秀仲,老公的妹妹穿的比我還像新娘。我一直安慰自己糕篇,他們只是感情好啄育,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拌消,像睡著了一般挑豌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上墩崩,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天氓英,我揣著相機(jī)與錄音,去河邊找鬼鹦筹。 笑死铝阐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的铐拐。 我是一名探鬼主播徘键,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼遍蟋!你這毒婦竟也來了吹害?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤虚青,失蹤者是張志新(化名)和其女友劉穎它呀,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡纵穿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年下隧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谓媒。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡淆院,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出篙耗,到底是詐尸還是另有隱情迫筑,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布宗弯,位于F島的核電站脯燃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蒙保。R本人自食惡果不足惜辕棚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望邓厕。 院中可真熱鬧逝嚎,春花似錦、人聲如沸详恼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昧互。三九已至挽铁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敞掘,已是汗流浹背叽掘。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留玖雁,地道東北人更扁。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像赫冬,于是被迫代替她去往敵國(guó)和親浓镜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,504評(píng)論 25 707
  • 午加餐:蘋果劲厌,橙子竖哩,蛋卷 參考目標(biāo): 1份肉2份豆制品3份“新鮮”水果4份谷物/薯5份蔬菜,深綠色葉菜最好6杯水 ...
    靜趣_兒童心理師閱讀 103評(píng)論 0 0
  • 星星睡了 月亮醒著 這醉人的夜晚 白日的盔甲都已卸下 生活 此刻 我拿什么與你戰(zhàn)斗 那么 請(qǐng)盡情悲傷吧 溫柔的夜色...
    LittleMoonBaby閱讀 589評(píng)論 3 6
  • 越放松脊僚,飄的越高。 因?yàn)檎业搅硗庖粋€(gè)世界,所以這里她活的很敷衍辽幌。 大人和小孩的區(qū)別就是增淹,大人學(xué)會(huì)了努力,而孩子更加...
    一個(gè)怨婦的自白閱讀 183評(píng)論 0 0