支付宝小程序插件 插件后端开发

2020-09-18 14:28 更新

背景

插件不能独立运行,必须依附在其他的主体小程序上。目前插件背后对应一个三方应用,当插件需要获取商户拥有的支付宝能力的时候,必须代商户调用支付宝接口,所以插件服务端最重要的概念就是 代调用。

img

服务端开发准备

插件服务端开发需要下载支付宝服务端SDK。

插件代调用

  1. 插件代替商家来调用支付宝能力时候,需要获得商家授权发送 app_auth_code 换取 app_auth_token。授权消息相关操作请参见 插件授权,完成消息处理后请配送应用网关。
  2. 商家授权是授权商家下面某一个应用给插件代调用,所以插件服务端需要建立 PID - auth_app_id - app_auth_token 三者唯一关系。
  3. 当插件代理商家获取用户信息时候,需要用户授权发送 auth_code 给插件代理换取 access_token,最终用 app_id(三方应用id) + app_auth_token + access_token 请求接口获得用户信息。

获得 app_auth_token

app_auth_token:第三方应用授权获取的 token,用于 ISV 代商户发起请求。

当商家订购插件时,会授权三方应用行使代调用权限,app_auth_token 回调发送给插件所属三方应用的网关。在联调获取 app_auth_token 前,必须配置完成 应用网关授权回调地址

app_auth_token 回调以下信息发送网关:

  • ISV 发起授权
  • 下单消息:商户完成订购插件后服务商收到的关于商户的相关订单消息。

image.png

配置应用网关、授权回调地址

  • 应用网关:用于接收支付宝异步通知,例如口碑开店中,需要配置此网关来接收开发者门店被动通知;
  • 授权回调地址: 第三方授权或用户信息授权后回调地址。授权链接中配置的 redirect_uri 的值必须与此值保持一致。

img

在配置完成 应用网关授权回调地址 后,增加或删除应用功能包,都会推送最新的 app_auth_token 给插件服务端,采用这种方式可以验证模拟商户订购插件回调 app_auth_token 的过程。

img

获得 app_auth_token 的两种方法

方法一:商家订购插件,app_auth_token 回调发送给插件所属三方应用的应用网关。

方法二:在第三方应用的 商家授权应用 > 插件授权应用 中查找对应的 app_auth_token。

img

获得 auth_token

auth_token:用户信息授权获取的token,用于获取用户信息。

使用插件用户授权,获取用户的 auth_code,再换取 auth_token。

获得 auth_code

获取 auth_code 详情请参考 用户授权

通过auth_code 换取 auth_token

//三方应用开发者私钥,由开发者自己生成 参考 https://docs.open.alipay.com/200/105310#s2
String appPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCKnImlg1tZYi4UBFwk3A4L3LjuAy";
//支付宝公钥,由支付宝生成
String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4r6vW";
String format = "json";
String charset = "UTF-8";
String signType = "RSA2"; //商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
String serverUrl = "https://openapi.alipay.com/gateway.do";
String appId = "2018071660683196"; //三方应用id 保证应用已经上线了
String appAuthToken = "1cc19911172e4f8aaa509c8fb5d12F56"; //商户授权token https://docs.open.alipay.com/20160728150111277227/intro
String authCode = "bc95009acbe1401cabec35cece99SC12"; // 用户授权码


AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, appId, appPrivateKey, format, charset, alipayPublicKey, signType);
try {
    AlipaySystemOauthTokenRequest request = new AlipaySystemOauthTokenRequest();
    request.setGrantType("authorization_code");
    request.setCode(authCode);
    AlipaySystemOauthTokenResponse response = alipayClient.execute(request, null, appAuthToken);
    System.out.println(response.getAccessToken());
} catch (AlipayApiException e) {
    e.printStackTrace();
}

代调用获取用户信息

简单说代调用获取用户信息,是利用 app_id(三方应用id) + app_auth_token+access_token 调用接口获取用户信息。

//三方应用开发者私钥,由开发者自己生成 参考 https://docs.open.alipay.com/200/105310#s2
String appPrivateKey = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCKnImlg1tZYi4UBFwk3A4L3LjuAy";
//支付宝公钥,由支付宝生成
String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4r6vW";
String format = "json";
String charset = "UTF-8";
String signType = "RSA2"; //商户生成签名字符串所使用的签名算法类型,目前支持RSA2和RSA,推荐使用RSA2
String serverUrl = "https://openapi.alipay.com/gateway.do";
String appId = "2018071660683196"; //三方应用id 保证应用已经上线了
String appAuthToken = "1cc19911172e4f8aaa509c8fb5d12F56"; //商户授权token https://docs.open.alipay.com/20160728150111277227/intro
String accessToken = "22c19911172e4f8aaa509c8fb5d12F56"; //用户授权token


AlipayClient alipayClient = new DefaultAlipayClient(serverUrl, appId, appPrivateKey, format, charset, alipayPublicKey, signType);
try {
    AlipayUserInfoShareRequest request = new AlipayUserInfoShareRequest();
    AlipayUserInfoShareResponse response = alipayClient.execute(request, accessToken, appAuthToken);
    response.getUserId();
    response.getUserName();
} catch (AlipayApiException e) {
    e.printStackTrace();
}
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号