微信垫资还款api

应用场景

该接口可以实现从商户的业务跳转至还款小程序。现在支持商户业务类型为小程序和APP。

未接入垫资功能的商户无需调用

1.小程序调用请求说明

接口

参照官网用< navigator>组件实现跳转

https://developers.weixin.qq.com/miniprogram/dev/component/navigator.html

是否需要证书

extraData参数说明:

字段含义 变量名 必填 类型 示例值 描述
公众账号id appid String(32) wxcbda96de0b165486 微信支付分配的公众账号id
子商户公众账号id sub_appid String(32) wxcbda96de0b165489 子商户号绑定的服务号,小程序,APP的appid(需要在服务商的商户平台为子商户绑定)
商户号   mch_id String(32) 1900009231 微信支付分配的商户号
子商户号 sub_mch_id String(32) 1900000109 子商户号
随机字符串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位。
用户标识 openid String(32) oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 此参数必传,用户在商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid
用户子标识 sub_openid String(32) oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid
签名类型 sign_type String(32) HMAC-SHA256 签名类型,默认为HMAC-SHA256
签名 sign String(64) EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5 签名,详见签名生成算法

示例(此处的app-id和path为固定值,分别是还款小程序的appid和还款页面):

<navigator  target="miniProgram" open-type="navigate" app-id="wx5e73c65404eee268 " path="pages/invest_list/invest_list" extra-data="{{extraData}}" version="release">跳转到还款小程序</navigator>

var extraData = {
appid:wxcbda96de0b165486,
sub_appid:wxcbda96de0b165482,
mch_id:1900009231,
sub_mch_id:1900009232,
openid:'oUpF8uMEb4qRXf22hE3X68TekukE',
nonce_str:5K8264ILTKCH16CQ2502SI8ZNMTM67VS,
sign_type:'HMAC-SHA256',
sign:EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5};

小程序返回参数


2.APP调用请求说明

Android 第三方 app 需要处理 ShowMessageFromWX.req 的微信回调,iOS 则需要将 appId 添加到第三方 app 工程所属的 plist 文件 URL types 字段。

参数说明:

字段含义 变量名 必填 类型 示例值 描述
公众账号id appid String(32) wxcbda96de0b165486 微信支付分配的公众账号id
子商户公众账号id sub_appid String(32) wxcbda96de0b165489 子商户号绑定的服务号,小程序,APP的appid(需要在服务商的商户平台为子商户绑定)
商户号   mch_id String(32) 1900009231 微信支付分配的商户号
子商户号 sub_mch_id String(32) 1900000109 子商户号
随机字符串 nonce_str String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位。
用户标识 openid String(32) oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 此参数必传,用户在商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid
用户子标识 sub_openid String(32) oUpF8uMuAJO_M2pxb1Q9zNjWeS6o 此参数必传,用户在子商户appid下的唯一标识。openid和sub_openid可以选传其中之一,如果选择传sub_openid,则必须传sub_appid
签名类型 sign_type String(32) HMAC-SHA256 签名类型,默认为HMAC-SHA256
签名 sign String(64) EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5 签名,详见签名生成算法
APP Scheme scheme String(64) weixin 商户APP的URL Scheme,用于小程序跳转回商户APP

示例:

Android示例如下
String appId = "wx5e73c65404eee268"; // 填写当前商户APP的APPID
IWXAPI api = WXAPIFactory.createWXAPI(context, appId);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
req.userName = "gh_5e259b7a73b1"; // 固定值,还款小程序原始id
//拉起小程序页面的可带参路径,不填默认拉起小程序首页
req.path = "pages/invest_list/invest_list?mch_id=1900009231&sub_mch_id=1900009232&appid=wxcbda96de0b165486&nonce_str=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&sign_type=HMAC-SHA256&sign=EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5&openid=oUpF8uMEb4qRXf22hE3X68TekukE&scheme=weixin;
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;
api.sendReq(req);


IOS示例如下
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName =@"gh_5e259b7a73b1"; // 固定值,还款小程序原始id
launchMiniProgramReq.path = @"pages/invest_list/invest_list?mch_id=1900009231&sub_mch_id=1900009232&appid=wxcbda96de0b165486&nonce_str=5K8264ILTKCH16CQ2502SI8ZNMTM67VS &sign_type=HMAC-SHA256&sign=EE088059BBC9141264F8D14293AD6C4BB94CEA8C08AA98FBF93E262D445F8FF5&openid=oUpF8uMEb4qRXf22hE3X68TekukE&scheme=weixin"; //拉起小程序页面的可带参路径,不填默认拉起小程序首页
launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease; //拉起小程序的类型
return [WXApi sendReq:launchMiniProgramReq];

APP返回参数(用户授权完成之后,会跳转回到商户的APP,暂时不返回参数。商户侧APP接收到客户端回调后再次调用用户状态查询接口获取用户的最新状态 ):

Android示例如下
public void onResp(BaseResp resp) {
  Log.i(TAG,"--->>>onResp:");
  int result = 0;
  isSucc =false;
  Toast.makeText(this, "baseresp.getType = " + resp.getType(), Toast.LENGTH_SHORT).show();

    switch (resp.errCode) {
    case BaseResp.ErrCode.ERR_OK:
    isSucc = true;
    result = R.string.errcode_success;
    break;
  case BaseResp.ErrCode.ERR_USER_CANCEL:
    result = R.string.errcode_cancel;
    break;
  case BaseResp.ErrCode.ERR_AUTH_DENIED:
    result = R.string.errcode_deny;
    break;
  case BaseResp.ErrCode.ERR_UNSUPPORT:
    result = R.string.errcode_unsupported;
    break;
  default:
    result = R.string.errcode_unknown;
    break;
  }
Toast.makeText(this, result, Toast.LENGTH_LONG).show();
}

注意由于Android的返回机制,会导致这里有体验问题,需要在配置文件里面的AndroidManifest.xml里面增加这两项配置
<activity
android:name="com.diipo.pandaspeed.wxapi.WXEntryActivity"(注意这里红色部分需要改成自己的包名)
android:exported="true"
android:label="@string/app_name"
android:launchMode="singleTask"(新增项)
android:taskAffinity="com.diipo.pandaspeed" (各业务自己的包名)(新增项)>
</activity>

IOS示例如下

-(void)onResp:(BaseResp *)resp 
{
     if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]])
     {
          NSString *string = resp.extMsg;
          // 对应小程序组件 <button open-type="launchApp"> 中的 app-parameter 属性
     }
}