小程序纯签约

应用场景

商户可以通过请求此接口唤起小程序委托代扣的签约页面,页面样例见委托代扣模式

用户在微信的页面中完成代扣签约后,微信会同时将签约信息通过异步通知的方式通知给商户后台。如果用户放弃签约或签约失败则不通知。

商户流程介绍

  1. 1.用户从商户小程序发起签约请求 (商户需确认委托代扣权限已开通,模版已审批通过,小程序APPID与商户号已绑定)
  2. 2.商户将签约请求参数按照规则拼接之后,通过小程序跳转,向签约小程序发起签约请求
  3. 3.用户在微信签约小程序选择支付方式完成签约
  4. 4.微信将签约结果返回给商户

接口调用请求说明

接口

wx.navigateToMiniProgram(OBJECT)接口

说明

iOS 微信客户端 6.5.9 版本开始支持,Android 客户端即将在 6.5.10 版本开始支持

OBJECT参数说明:

字段含义 变量名 必填 示例值 类型 描述

微信签约小程序appid

appId

wxbd687630cd02ce1d

String

固定值
wxbd687630cd02ce1d

请在小程序配置文件app.json的配置项navigateToMiniProgramAppIdList中增加此appid

-场景信息传递给小程序的数据

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

签约的请求参数,详情见extraData字段详细说明

--商户号

mch_id

10000098

String(32)

微信支付分配的商户号

--公众账号id

appid

wxcbda96de0b165486

String(32)

发起签约的小程序appid

--模板id

plan_id

123

String(28)

协议模板id

--签约协议号

contract_code

100001256

String(32)

商户侧的签约协议号,由商户生成,商户侧须唯一

--请求序列号

request_serial

1695

Int64

商户请求签约时的序列号,要求唯一性。序列号主要用于排序,不作为查询条件,纯数字,范围不能超过Int64的范围(9223372036854775807)。

--用户账户展示名称

contract_display_account

张三

String(32)

签约用户的名称,用于页面展示,不需要对值进行urlencode,参数值不支持UTF8非3字节编码的字符,例如表情符号,所以请勿传微信昵称到该字段

--回调通知url

notify_url

http://yoursite.com

String(32)

HTTP或者HTTPS开头的回调通知url ,不需要对值进行urlencode

--签名

sign

E1EE61A91C8E90F299DE6AE075D60A2D

String(32)

注:是对extraData内所有参数按照签名生成算法做签名,所有参数都是encode前的值参与签名
签名规则详见签名生成算法

--时间戳

timestamp

1414488825

String(10)

系统当前时间,定义规则详见时间戳

--商户侧用户标识

outerid

 

String

用户在商户侧的标识

打开小程序的页面路径

path

pages/index/index

string

固定值:pages/index/index

接口调用成功的回调函数

success

 

Function

 

接口调用失败的回调函数

fail

 

Function

 

接口调用结束的回调函数

complete

 

Function

调用成功、失败都会执行


示例:
wx.navigateToMiniProgram({
    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) {
    // 成功跳转到签约小程序
},
fail(res) {
    // 未成功跳转到签约小程序
}
})

用户签约完成之后,会跳转回商户小程序,可通过onShow(OBJECT)所携带的参数判断判断用户由签约小程序返回商户小程序,OBJECT返回参数请查看小程序开发文档onShow参数说明

referrerInfo.extraData字段说明

返回码 变量名 必填 示例值 类型 描述

返回码

return_code

SUCCESS

String

客户端小程序收到的签约结果

SUCCESS:签约成功

FAIL:签约失败

错误信息

return_msg

 

String

签约失败的错误信息

委托代扣协议id

contract_id

201710180325670965

String

签约成功后微信返回的委托代扣协议id

注意:如果用户正常点击微信签约页的确定按钮返回商户小程序,那么会返回extraData ; 如果用户点击浏览器左上角的返回,则不返回extraData


示例:

App({
    onShow(res) {
        if (res.scene === 1038) { // 场景值1038:从被打开的小程序返回
            const { appId, extraData } = res.referrerInfo
            if (appId == 'wxbd687630cd02ce1d') { // appId为wxbd687630cd02ce1d:从签约小程序跳转回来
                if (typeof extraData == 'undefined'){
                    // TODO
                    // 客户端小程序不确定签约结果,需要向商户侧后台请求确定签约结果
                    return;
                }
                if(extraData.return_code == 'SUCCESS'){
                    // TODO
                    // 客户端小程序签约成功,需要向商户侧后台请求确认签约结果
                    var contract_id = extraData.contract_id
                    return;
                } else {
                    // TODO
                    // 签约失败
                    return;
                }
            }
        }
    }
})