概要
開發(fā)中涉及到登錄界面误窖,因為使用原生APP賬號登錄在小程序中幾乎不可行,所有急需開發(fā)
使用微信登錄微信小程序的接口
一 涉及API(application programming interface)
wx.login()
調(diào)用接口獲取登錄憑證code, 進而換取用戶登錄態(tài)信息,包括
(1)用戶的唯一標(biāo)識openid歌馍;
(2)本次登錄的會話密鑰session_key
用戶數(shù)據(jù)的加解密通訊需要依賴會話密鑰完成
code說明:用戶允許登錄后舆乔,回調(diào)內(nèi)容會帶上code赚瘦,有效期5分鐘,
開發(fā)者需要將code發(fā)送到服務(wù)器后臺报咳,使用code換取openid, session_key
code 換取session_key
是一個https接口椎咧,開發(fā)者服務(wù)器使用登錄憑證code獲取session_key , openid
session_key不應(yīng)該在網(wǎng)絡(luò)上傳輸(不要傳輸?shù)娇蛻舳耍?因為session_key是對用戶數(shù)據(jù)進行加密簽名的密鑰
接口URL
https://api.weixin.qq.com/sns/jscode2session
?appid=APPID
&secret=SECRET
&js_code=JSCODE
&grant_type=authorization_code
四個參數(shù)說明:
(1)appid, 小程序唯一標(biāo)識
(2)secret 小程序的app 密鑰
(3)js_code 登錄時候獲取的code
(4)grant_type 授權(quán)類型玖详,填寫為 authorization_code
二 登錄流程
(1)客戶端(小程序)獲取code,傳送到后臺服務(wù)器
(2)后臺服務(wù)器獲取code邑退,結(jié)合appid竹宋,appsecret獲取openid,session_key地技;
(3)后臺服務(wù)器根據(jù)openid, session_key生成唯一的tokenID蜈七,
tokenID需要保證唯一性,設(shè)置一定時間的有效性
(4)后臺服務(wù)器生成的tokenID莫矗,需要存儲于相應(yīng)的數(shù)據(jù)庫中
(5)將tokenID返回到客戶端(小程序)飒硅,
小程序?qū)⒌玫降膖okenID存入本地緩存中,用于后續(xù)用戶獲取
openID作谚,session_key的憑證
三 微信支付
1 接口 wx.requestPayment()
包含參數(shù):
timeStamp 當(dāng)前的時間
nonceStr 隨機的字符串
package 統(tǒng)一下單接口返回的prepay_id 參數(shù)值
signType 簽名算法三娩,MD5
paySign 簽名
2 支付開發(fā)文檔
2.1 基礎(chǔ)知識-支付方式
刷卡支付,掃碼支付妹懒,公眾號支付雀监,App支付,小程序支付
分別介紹:
(1)刷卡支付: 用戶展示微信錢包內(nèi)的刷卡條碼、
二維碼給商戶系統(tǒng)掃描会前,直接完成支付的模式好乐,
線下面對面收銀的場景
(2)掃碼支付:商戶系統(tǒng)按照微信支付協(xié)議,生成支付二維碼瓦宜,
用戶用微信
掃一掃完成支付的模式蔚万,適用于PC網(wǎng)站支付,
實體店單品或者訂單支付临庇,媒體廣告支付等等場景
(3)公眾號支付: 是用戶在微信中打開商戶的H5頁面反璃,
商戶在H5頁面通過調(diào)用微信支付提供的 JSAPI 接口調(diào)用
微信支付模塊 完成支付
應(yīng)用場景是: 用戶在微信公眾號內(nèi) 進入商家公眾號,
打開某個主頁面假夺,完成支付
用戶的好友在朋友圈淮蜈,聊天窗口等分享商家頁面鏈接,
用戶點擊鏈接打開商家頁面侄泽,完成支付
將商戶頁面轉(zhuǎn)換成二維碼礁芦, 用戶掃碼后再微信瀏覽器中
打開頁面完成支付
(4)App支付 :移動端支付蜻韭,是商戶通過在移動端應(yīng)用
App中集成開發(fā)的SDK調(diào)用微信支付模塊完成支付的模式
(5)小程序支付:是商戶在微信小程序平臺內(nèi)實現(xiàn)支付功能
2.2基礎(chǔ)知識 - 名詞解釋
(1)[微信公眾平臺](http://mp.weixin.qq.com):
微信公眾賬號申請入口和管理后臺
商戶可以在公眾平臺提交基本資料悼尾,業(yè)務(wù)資料,財務(wù)資料肖方,
申請開通微信支付功能
(2)[微信開放平臺](http://open.weixin.qq.com):
商戶App接入微信支付開放平臺的申請入口闺魏,
通過此平臺可以申請微信App支付
(3)[微信商戶平臺](http://pay.weixin.qq.com)
微信支付相關(guān)的商戶功能集合,包括參數(shù)配置俯画,支付數(shù)據(jù)查詢和統(tǒng)計析桥,
在線退款,代金券艰垂,立減優(yōu)惠運營等功能
(4)[微信企業(yè)號](http://qy.weixin.qq.com)
企業(yè)號的申請入口和管理后臺泡仗,商戶可以在企業(yè)號中提交基本資料
等資料申請開通微信支付功能
(5)微信支付系統(tǒng)
完成微信支付流程中涉及的API接口,后臺業(yè)務(wù)處理系統(tǒng)猜憎,財務(wù)系統(tǒng)娩怎,
回調(diào)通知系統(tǒng)的總稱
(6)[微信小程序](https://mp.weixin.qq.com/debug/wxadoc/dev/)
微信提供給商戶實現(xiàn)App的一種輕應(yīng)用,開發(fā)起來簡單易用
(7)商戶后臺系統(tǒng)
商戶后臺處理業(yè)務(wù)系統(tǒng)的總稱胰柑,例如: 商戶網(wǎng)站截亦,收銀系統(tǒng),
進銷存系統(tǒng)柬讨,發(fā)貨系統(tǒng)崩瓤,客服系統(tǒng)等等
(8)商戶證書
微信提供的二進制文件,商戶系統(tǒng)發(fā)起和
微信支付后臺服務(wù)器通信請求的時候踩官,
作為微信支付后臺識別商戶真實身份的憑據(jù)
(9)簽名
商戶后臺和微信支付后臺根據(jù)相同的密鑰和算法生成一個結(jié)果却桶,
用于校驗雙方身份合法性
簽名的算法由微信支付制定并公開,常用的簽名方式有:
MD5蔗牡, SHA1颖系, SHA256畴嘶, HMAC等等
(10)JSAPI網(wǎng)頁支付
公眾號支付,可以在微信公眾號集晚,朋友圈窗悯,聊天會話中點擊頁面鏈接,
或者用微信掃一掃偷拔,掃描頁面地址二維碼
在微信中打開商戶的HTML5頁面蒋院,在頁面下單,完成支付
(11)支付密碼
用戶開通微信支付時候莲绰,單獨設(shè)置的密碼欺旧,
用于確認(rèn)支付完成交易授權(quán),與微信登錄密碼不相同
(12)Openid
用戶在小程序內(nèi)的身份標(biāo)識蛤签,不同的小程序擁有不同的openid
商戶后臺系統(tǒng)通過登錄授權(quán)辞友,支付通知,
查詢訂單等API可以獲取
用戶的openid震肮,主要用途判斷是否是同一個用戶
2.3 基礎(chǔ)規(guī)范-協(xié)議規(guī)則
接口規(guī)則
傳輸方式 HTTPS傳輸
提交方式 POST方法提交
數(shù)據(jù)格式 提交返回數(shù)據(jù)是 XML格式称龙, 根節(jié)點名為xml
字符編碼 UTF-8
簽名算法 MD5 后續(xù)會有其他算法
簽名要求 請求和接收數(shù)據(jù)需要校驗簽名
證書要求 調(diào)用申請退款 撤銷訂單接口需要商戶證書
判斷邏輯 先判斷協(xié)議字段返回 ,再判斷業(yè)務(wù)返回戳晌, 最后判斷交易狀態(tài)
參數(shù)規(guī)定
body字段格式要求
字段規(guī)則 ---商家名稱-銷售商品類目
樣例 ---(羅輯思維-圖書)
備注 ---線上電商 鲫尊,商家名稱必須為實際銷售商品的商家
交易金額
默認(rèn)為人民幣交易,接口中參數(shù)支付金額單位為分
參數(shù)值不能帶小數(shù)沦偎, 對賬單中的交易金額單位為元
外幣交易的支付金額精確到幣種的最小單位疫向,參數(shù)值不能帶小數(shù)點
交易類型
JSAPI---小程序支付統(tǒng)一下單接口 trade_type的傳參數(shù)可參考此處
貨幣類型
CNY:人民幣
時間
標(biāo)準(zhǔn)北京時間,東八區(qū)
時間戳
標(biāo)準(zhǔn)北京時間豪嚎,東八區(qū) 基礎(chǔ)單位是秒
商戶訂單號
商戶支付的訂單號由 商戶自定義生成搔驼, 微信支付要求商戶訂單號 保持唯一性
建議根據(jù)系統(tǒng)的時間加上隨機序列生成訂單號
重新發(fā)起一筆支付要使用原訂單號, 避免重復(fù)支付
已經(jīng)支付過或者已經(jīng)調(diào)用關(guān)閉訂單侈询, 撤銷的訂單號不能重新發(fā)起支付