小程序純簽約
應(yīng)用場(chǎng)景
商戶可以通過(guò)請(qǐng)求此接口喚起小程序委托代扣的簽約頁(yè)面,頁(yè)面樣例見(jiàn)委托代扣模式。
用戶在微信的頁(yè)面中完成代扣簽約后,微信會(huì)同時(shí)將簽約信息通過(guò)異步通知的方式通知給商戶后臺(tái)。如果用戶放棄簽約或簽約失敗則不通知。
商戶流程介紹
- 1.用戶從商戶小程序發(fā)起簽約請(qǐng)求 (商戶需確認(rèn)委托代扣權(quán)限已開(kāi)通,模板已審批通過(guò),小程序APPID與商戶號(hào)已綁定)
- 2.商戶將簽約請(qǐng)求參數(shù)按照規(guī)則拼接之后,通過(guò)小程序跳轉(zhuǎn),向簽約小程序發(fā)起簽約請(qǐng)求
- 3.用戶在微信簽約小程序選擇支付方式完成簽約
- 4.微信將簽約結(jié)果返回給商戶
接口調(diào)用請(qǐng)求說(shuō)明
接口 | wx.navigateToMiniProgram(OBJECT)接口 |
---|---|
說(shuō)明 | iOS 微信客戶端 6.5.9 版本開(kāi)始支持,Android 客戶端即將在 6.5.10 版本開(kāi)始支持 |
OBJECT參數(shù)說(shuō)明:
字段含義 | 變量名 | 必填 | 示例值 | 類型 | 描述 |
---|---|---|---|---|---|
微信簽約小程序appid |
appId |
是 |
wxbd687630cd02ce1d |
String |
固定值 請(qǐng)?jiān)谛〕绦蚺渲梦募pp.json的配置項(xiàng)navigateToMiniProgramAppIdList中增加此appid |
-場(chǎng)景信息傳遞給小程序的數(shù)據(jù) | extraData |
是 |
{"appid":"wx0317c726bd1c1111","mch_id":"1900000000","notify_url":"https://www.qq.com/a.php","contract_code":"2017121216136aa","contract_display_account":"張三","plan_id":"72803","request_serial":"1000","timestamp":"1513065696","sign":"63EE946A87EE1C8F6C12C1DB085C8B7E"} |
object |
簽約的請(qǐng)求參數(shù),詳情見(jiàn)extraData字段詳細(xì)說(shuō)明 |
--商戶號(hào) |
mch_id |
是 |
10000098 |
String(32) |
微信支付分配的商戶號(hào) |
--公眾賬號(hào)id |
appid |
是 |
wxcbda96de0b165486 |
String(32) |
發(fā)起簽約的小程序appid |
--模板id |
plan_id |
是 |
123 |
String(28) |
協(xié)議模板id |
--簽約協(xié)議號(hào) |
contract_code |
是 |
100001256 |
String(128) |
商戶側(cè)的簽約協(xié)議號(hào),由商戶生成,商戶側(cè)須唯一 |
--請(qǐng)求序列號(hào) |
request_serial |
是 |
1695 |
int64 |
商戶請(qǐng)求簽約時(shí)的序列號(hào),要求唯一性。序列號(hào)主要用于排序,不作為查詢條件,純數(shù)字,范圍不能超過(guò)int64的范圍(9223372036854775807)。 |
--用戶賬戶展示名稱 |
contract_display_account |
是 |
張三 |
String(128) |
簽約用戶的名稱,用于頁(yè)面展示,不需要對(duì)值進(jìn)行urlencode,參數(shù)值不支持UTF8非3字節(jié)編碼的字符,例如表情符號(hào),所以請(qǐng)勿傳微信昵稱到該字段 |
--回調(diào)通知url |
notify_url |
是 |
http://yoursite.com |
String(32) |
HTTP或者HTTPS開(kāi)頭的回調(diào)通知url ,不需要對(duì)值進(jìn)行urlencode |
--簽名 |
sign |
是 |
E1EE61A91C8E90F299DE6AE075D60A2D |
String(32) |
注:是對(duì)extraData內(nèi)所有參數(shù)按照簽名生成算法做簽名,所有參數(shù)都是encode前的值參與簽名 |
--時(shí)間戳 |
timestamp |
是 |
1414488825 |
String(10) |
系統(tǒng)當(dāng)前時(shí)間,定義規(guī)則詳見(jiàn)時(shí)間戳 |
--商戶側(cè)用戶標(biāo)識(shí) |
outerid |
否 |
|
String |
用戶在商戶側(cè)的標(biāo)識(shí) |
打開(kāi)小程序的頁(yè)面路徑 |
path |
是 |
pages/index/index |
string |
固定值:pages/index/index |
接口調(diào)用成功的回調(diào)函數(shù) |
success |
是 |
|
Function |
|
接口調(diào)用失敗的回調(diào)函數(shù) |
fail |
是 |
|
Function |
|
接口調(diào)用結(jié)束的回調(diào)函數(shù) |
complete |
是 |
|
Function |
調(diào)用成功、失敗都會(huì)執(zhí)行 |
示例:
appId:'wxbd687630cd02ce1d',
path:'pages/index/index',
extraData:{
appid:'wx426a3015555a46be',
contract_code:'122',
contract_display_account:'張三',
mch_id:'1223816102',
notify_url:'https://www.qq.com/test/papay',
plan_id:'106',
request_serial:'123',
timestamp:1414488825,
sign:'FF1A406564EE701064450CA2149E2514'
},
success(res) {
// 成功跳轉(zhuǎn)到簽約小程序
},
fail(res) {
// 未成功跳轉(zhuǎn)到簽約小程序
}
})
用戶簽約完成之后,會(huì)跳轉(zhuǎn)回商戶小程序,可通過(guò)onShow(OBJECT)所攜帶的參數(shù)判斷判斷用戶由簽約小程序返回商戶小程序,OBJECT返回參數(shù)請(qǐng)查看小程序開(kāi)發(fā)文檔onShow參數(shù)說(shuō)明
referrerInfo.extraData字段說(shuō)明
返回碼 | 變量名 | 必填 | 示例值 | 類型 | 描述 |
---|---|---|---|---|---|
返回碼 |
return_code |
是 |
SUCCESS |
String |
客戶端小程序收到的簽約結(jié)果 SUCCESS:簽約成功 FAIL:簽約失敗 |
錯(cuò)誤信息 |
return_msg |
是 |
|
String |
簽約失敗的錯(cuò)誤信息 |
委托代扣協(xié)議id |
contract_id |
是 |
201710180325670965 |
String |
簽約成功后微信返回的委托代扣協(xié)議id |
注意:如果用戶正常點(diǎn)擊微信簽約頁(yè)的確定按鈕返回商戶小程序,那么會(huì)返回extraData ; 如果用戶點(diǎn)擊瀏覽器左上角的返回,則不返回extraData
示例:
onShow(res) {
if (res.scene === 1038) { // 場(chǎng)景值1038:從被打開(kāi)的小程序返回
const { appId, extraData } = res.referrerInfo
if (appId == 'wxbd687630cd02ce1d') { // appId為wxbd687630cd02ce1d:從簽約小程序跳轉(zhuǎn)回來(lái)
if (typeof extraData == 'undefined'){
// TODO
// 客戶端小程序不確定簽約結(jié)果,需要向商戶側(cè)后臺(tái)請(qǐng)求確定簽約結(jié)果
return;
}
if(extraData.return_code == 'SUCCESS'){
// TODO
// 客戶端小程序簽約成功,需要向商戶側(cè)后臺(tái)請(qǐng)求確認(rèn)簽約結(jié)果
var contract_id = extraData.contract_id
return;
} else {
// TODO
// 簽約失敗
return;
}
}
}
}
})