小程序微信支付 實例配置詳解

★ 背景

  • 近期進(jìn)行小程序的開發(fā)绩脆,畢竟是商城項目的開發(fā)刘莹,最后牽扯到的微信支付是必要的
  • 個人開發(fā)過程中也是遇到各種問題,在此目代,我根據(jù)自己的實際操作屈梁,進(jìn)行了代碼的詳細(xì)配置,以方便小程序新手的快速操作
-  使用語言:PHP             # PHP世界上最好的語言 HaHahahaaha
-  使用框架:ThinkPHP 3.2    # 版本有點低而已榛了,沒啥大礙
-  測試工具:微信開發(fā)者工具    # 其實還挺好用
-  整理時間:2018-07-07      # 有問題在讶,就會一直更新

tip: 【代碼都是可轉(zhuǎn)化的,即便是ThinkPHP5.0+ 還是Laravel框架忽冻,相對熟悉PHP代碼語法的真朗,進(jìn)行轉(zhuǎn)化也只是分分鐘的事哦!】

一僧诚、開發(fā)前的準(zhǔn)備

①. 開發(fā)步驟

  • 如果開發(fā)者已做過 JSAPIJSSDK 調(diào)起微信支付遮婶,接入小程序支付非常相似,以下是三種接入方式的對比:
  • 如此看來湖笨,小程序要想集成支付功能旗扑,倒是簡單了

②. 閱讀業(yè)務(wù)流程圖

  • 本人強(qiáng)烈推薦閱讀這個圖示,流程明確了慈省,代碼邏輯自然也就理順了臀防!


③. 小程序支付業(yè)務(wù)

# 很多人這一步還沒有完成边败,就咔咔咔的測試支付功能袱衷,顯然是太急于求成了,比如:我笑窜!
> 注意:
> 1. 要開通微信支付功能(一般有兩三天的審核時間)
> 2. 本人開通后致燥,選擇的是 “綁定一個已有的微信支付商戶號”,也就幾分鐘的事
  • 此處請閱讀官方文末的注意事項【重要】:
1 appid 必須為最后拉起收銀臺的小程序appid排截; 
        # 這句話感覺不說還好嫌蚤,一說更容易引起多余的考慮(忽視)
2 mch_id 為和 appid 成對綁定的支付商戶號辐益,收款資金會進(jìn)入該商戶號;
        # 此處我直接使用了所綁定的商戶號中的 mch_id
3 trade_type 請?zhí)顚?JSAPI"脱吱; 
        # 可暫時忽略智政,因為我在代碼中已進(jìn)行了配置
4 openid 為 appid 對應(yīng)的用戶標(biāo)識,即使用 "wx.login" 接口獲得的 openid 
        # 可參考我的 payment/index.js 代碼
        # 另一種情況箱蝠,如果項目數(shù)據(jù)庫中已保存了該用戶的openid字段续捂,可自行獲取

二、小程序端代碼配置指導(dǎo)

  • 這里進(jìn)行配置的代碼抡锈,都在附錄源碼包的 wxMini-PayDemo\wxChat 目錄下

為了項目代碼的 通用性/易管理性疾忍,我自行提取出了兩個主要的公共文件 config.jsutil.js;

①. utils下 config.js 文件的使用

  • config.js 文件中,主要就是配置一些公共訪問路徑之類的數(shù)據(jù)床三,方便后期代碼上線后的鏈接更改
  • 所以一罩,對于其中的 restUrlimgServer 修改為自己的服務(wù)器地址即可
> 注意一點:
> 我的 restUrl 是對應(yīng)于我的小程序 Api接口路徑的,舉個例子:
> 我的支付回調(diào)路徑為 "https://www.mySercver.com/WxApi/Pay/notify" 

②. utils下 util.js 文件的使用

  • 這個是和 config.js 文件在同一目錄下的公共文件
  • 其實就是整合了三個主要的方法撇簿,需要注意的是:如果你有所補(bǔ)充聂渊,記得在文件的最后進(jìn)行輸出就好
module.exports = {
  http_get: http_get,
  http_post: http_post,
  showToast: showToast,
}

③. payment/index.js 文件的使用

  • 此文件作為 小程序微信支付前端的核心文件
  • 在保證你的各個文件目錄對應(yīng)配置正確的情況下,只需在進(jìn)行支付喚醒時四瘫,調(diào)用其中的 btnClickToPay() 方法即可:
  • 當(dāng)然汉嗽,我只是隨便定的一個方法,實際使用的時候找蜜,其實就是以類似的形式饼暑,去調(diào)用后面的 wxPay()方法唄!

三洗做、服務(wù)端代碼文件的使用指導(dǎo)

  • 這里進(jìn)行配置的代碼弓叛,都在源碼包的 wxMini-PayDemo\Server-PHP 目錄下

聲明:
***因為本人所提供的代碼是基于 ThinkPHP3.2 框架編寫整理的,所以對于使用過 ThinkPHPLaravel 框架的 PHPer 來說诚纸,簡單明了撰筷,可根據(jù)自己的框架進(jìn)行調(diào)整適配,所以畦徘,此處講的可能不會太過瑣碎 ***

①. 公共配置文件的數(shù)據(jù)補(bǔ)充

  • 此為源代碼中的 "wxMini-PayDemo\Server-PHP\Conf\config.php"毕籽,此文件代碼比較少,我直接進(jìn)行展示:
return array(
    //'配置項'=>'配置值'
    'wxPay' => [
        'appid' => 'wx8787xxxxxxxxxxxxx',//TODO 此處使用的是小程序的 APPID
        'app_secret' => '0a7xxxxxxxxxxxxxxxxxxxxxxxxxxxxx622', //小程序的應(yīng)用密鑰
        'pay_mchid' => '13xxxxxx02', // 微信支付MCHID 商戶收款賬號
        'pay_apikey' => '1qaxxxxxxxxxxxxxxxxxxxxxhgf5', // 微信支付KEY
        'notify_url' => 'https://www.mySercver.com/WxApi/Pay/notify', // 微信支付成功后進(jìn)行回調(diào)的鏈接
        'login_url' => "https://api.weixin.qq.com/sns/jscode2session?" .
            "appid=%s&secret=%s&js_code=%s&grant_type=authorization_code", // 微信使用code換取用戶openid及session_key的url地址
    ],
);
  • 對于上述配置信息的來源井辆,應(yīng)該沒啥疑問吧关筒?
注意一點:
"notify_url" 作為支付回調(diào)的鏈接地址,要求配置成自己的服務(wù)器路徑 
    ;#同時注意協(xié)議的要求 “https” 
小程序官方要求:
    ;# 需要進(jìn)行服務(wù)器域名的配置
    ;# 操作位置為 “小程序(微信公眾平臺)/設(shè)置/開發(fā)設(shè)置”中的“服務(wù)器域名->request合法域名”

②. 公共方法 function.php 的補(bǔ)充

  • 對于本人的邏輯處理中杯缺,其實只有一個方法 curl_get(), 并且只在 PayController.class.phpgetOpenID() 方法中進(jìn)行了一次調(diào)用平委,也可以自行提取使用的

③. 核心處理文件 PayController.class.php

  • 此文件代碼已做了詳細(xì)處理,在你正確放置后夺谁,需要注意的幾點如下:
(1). 注意命名空間 "namespace" 與自己業(yè)務(wù)代碼的對應(yīng) 
(2). 在 "prepay()" 方法中廉赔,因為不同的業(yè)務(wù)都會有屬于自己的判斷處理邏輯,
     所以匾鸥,在使用時完全可以替換掉所調(diào)用的 "prepayOrderDeal()" 方法  ;# 相信沒多大歧義吧蜡塌!
         #【在此處,我建議進(jìn)行一下微信支付金額的校對勿负,
         # 比如馏艾,通過訂單號到你的項目數(shù)據(jù)庫中,查詢出需要支付的金額再與此比較奴愉,
         # 只有符合你的要求才可以進(jìn)行微信支付的下單操作】
(3). 再有就是琅摩,在 "notify()" 這個回調(diào)方法中,一定會涉及到自己業(yè)務(wù)的更新處理邏輯
     所以被調(diào)用的 "payNotifyOrderDeal()" 方法中就可以改成你自己的業(yè)務(wù)邏輯了
         ;#此處是可以自行補(bǔ)充的
    注意锭硼,此處傳入的 "$result" 參數(shù)中,我主要使用的就是其中的 "out_trade_no" 和 "total_fee" 
        # 包含著微信支付的眾多信息房资,可自行提取
    前者用于匹配我對該已支付訂單的后續(xù)更新操作 
        #【提示:我在使用時需要使用 "M" 進(jìn)行字符串的截取才是我自己業(yè)務(wù)的實際訂單編號哦!】;
    后者是實際微信消費(fèi)的金額檀头,可用于數(shù)據(jù)表的記錄轰异,以方便對賬人員的校對工作

四、使用及測試效果

①. 測試效果

  • 在我的小程序項目中暑始,喚醒的效果(開發(fā)工具中)如下:


  • 如果是在自己的手機(jī)端進(jìn)行測試搭独,在保證你的域名配置正確的情況下,喚醒的樣式就是常見的樣子:


②. 補(bǔ)充說明

- 相信在實際配置使用的過程中一定會出現(xiàn)各種問題廊镜,我也是一點點的梳理排錯過來的
- 前面的多是些配置問題的規(guī)范牙肝,如果到了最后的喚醒階段,出現(xiàn)的問題要注意查看開發(fā)工具的控制臺嗤朴,
- 其中會有比較詳細(xì)的報錯信息配椭,然后再進(jìn)行排查解決
- 有何問題,歡迎指摘播赁,祝你配置順利咯颂郎!

☆ 附錄:

①. >>> 源碼下載參考

②. 總結(jié)

  • 通過對以上操作的梳理,可以提取出主要的幾個步驟:
- . 小程序要開通你的微信支付功能 # 需要審核時間的
- . 審核通過后容为,緊接著進(jìn)行"開通"操作 #可有兩種開通方式進(jìn)行選擇的
- . 前后端重要信息配置完畢
- . 補(bǔ)充自己的特有邏輯處理操作 #pay/prepayOrderDeal()和 pay/payNotifyOrderDeal()
- . 支付回調(diào)成功后乓序,進(jìn)行后續(xù)的訂單(項目服務(wù)器)查詢操作
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市坎背,隨后出現(xiàn)的幾起案子替劈,更是在濱河造成了極大的恐慌,老刑警劉巖得滤,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陨献,死亡現(xiàn)場離奇詭異,居然都是意外死亡懂更,警方通過查閱死者的電腦和手機(jī)眨业,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門急膀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人龄捡,你說我怎么就攤上這事卓嫂。” “怎么了聘殖?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵晨雳,是天一觀的道長。 經(jīng)常有香客問我奸腺,道長餐禁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任突照,我火速辦了婚禮帮非,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绷旗。我一直安慰自己喜鼓,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布衔肢。 她就那樣靜靜地躺著庄岖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪角骤。 梳的紋絲不亂的頭發(fā)上隅忿,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天,我揣著相機(jī)與錄音邦尊,去河邊找鬼背桐。 笑死,一個胖子當(dāng)著我的面吹牛蝉揍,可吹牛的內(nèi)容都是我干的链峭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼又沾,長吁一口氣:“原來是場噩夢啊……” “哼弊仪!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起杖刷,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤励饵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后滑燃,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體役听,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了典予。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甜滨。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖熙参,靈堂內(nèi)的尸體忽然破棺而出艳吠,到底是詐尸還是另有隱情,我是刑警寧澤孽椰,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站凛篙,受9級特大地震影響黍匾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呛梆,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一锐涯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧填物,春花似錦纹腌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至击困,卻和暖如春涎劈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阅茶。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工蛛枚, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人脸哀。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓蹦浦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撞蜂。 傳聞我的和親對象是個殘疾皇子盲镶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)谅摄,斷路器徒河,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 轉(zhuǎn)載鏈接 注:本文轉(zhuǎn)載知乎上的回答 作者:初雪 鏈接:https://www.zhihu.com/question...
    pengshuangta閱讀 28,531評論 9 295
  • **題目1: 輪播的實現(xiàn)原理是怎樣的?如果讓你來實現(xiàn)送漠,你會抽象出哪些函數(shù)(or接口)供使用顽照?(比如 play())...
    大大的蘿卜閱讀 188評論 0 0
  • 聆聽鄭昊的《向前跑:2018剩下的2/3,我給你的幾個忠告》, 我后脊背直冒冷汗代兵。與這個90后相比尼酿,我開始懷疑人生...
    教書匠的快樂人生閱讀 595評論 20 23