1、开发测试
相关软件配置
- 天猫精灵容器版本 需要2.3.233.0版本及以上(检查容器版本方法:
adb shell dumpsys package com.alibaba.ailabs.genie.webapps | grep versionName
打印容器版本, 若容器版本过低,请联系天猫精灵方为您单独推送测试容器)
打开方式
- 支付宝小程序IDE推送到设备预览
2、小程序API
获取精灵账号信息
- API: my.call(‘getGenieUserInfo’)
- 功能:获取精灵账号信息
- 使用示例:
my.call('getGenieUserInfo', function(result) {
my.alert({
content: JSON.stringify(result) // userId
})
})
二维码支付
- API: my.call(‘qrcodePay’)
- 功能:二维码支付,调起收银台付款
- 入参://参数说明如下 | 属性 | 类型 | 必填 | 说明 | | —- | —- | —- | —- | | sellerId | Number | 是 | 商户的淘宝id | | content | String | 是 | 支付内容(内容的字段说明下表说明) | | sign | String | 是 | 对content 内容签名,商户的RSA私钥对内容的签名;平台会用商户上传的公钥验签 |
content支付内容字段说明
属性 | 类型 | 必填 | 说明 |
---|---|---|---|
amount | Number | 是 | 订单金额 (单位:分) |
appId | String | 是 | 小程序appid |
outItemId | String | 是 | 商户商品id |
outItemName | String | 是 | 商户售卖的产品名称 |
outOrderId | String | 是 | 商户订单号 |
payExpireTime | String | 是 | 订单的超时时间(默认15分钟) |
sellerId | Number | 是 | 商户的淘宝id |
秘钥说明
参数名 | 获取方式 |
---|---|
RSA私钥 | 商户自我管理 |
RSA公钥 | 商户入驻时,在开发设置里提供,必填 |
sign加签说明(服务端)
通过支付宝SDK提供的工具类进行加签验签操作。 可以在maven中央仓库下载到,版本选择3.7.80.ALL以上即可
https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
<dependency>
<groupId>alipay-sdk-java</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.80.ALL</version>
</dependency>
content: 需要加签的业务参数,json字符串
加签:
String sign = AlipaySignature.rsaSign(content, sysPriKey, "UTF-8", "RSA");
验签:
boolean signCheck = AlipaySignature.rsaCheck(content, sign2, sysPubKey, "UTF-8", "RSA");
常见的下单后无法唤起收银台的问题:
content的内容是json字符串, 但是被二次转义处理了,导致天猫精灵测验签失败
正例:
{\"amount\":19801,\"appId\":\"2021001140639410\",\"outItemId\":\"1000001\",\"outItemName\":\"VIP会员\",\"outOrderId\":\"102247420200401104523\",\"payExpireTime\":1585709123000,\"sellerId\":22070615698}"
反例:
\"{\\\"amount\\\":19801,\\\"appId\\\":\\\"2021001140639410\\\",\\\"outItemId\\\":\\\"1000001\\\",\\\"outItemName\\\":\\\"VIP会员\\\",\\\"outOrderId\\\":\\\"1021456202031172814\\\",\\\"payExpireTime\\\":1585646894000,\\\"sellerId\\\":2207615698}\"
商品金额的单位是分,切记!!!
- content里面部分字段含有特殊的转义字符,例如: “outItemName\”:\”VIP\u4f1a\u5458\”
- content字符串顺序发生变更,加密的字符串顺序和传给天猫精灵的字符串顺序不一致。
- response:支付结果回调 | 回调方法 | 类型 | 必填 | 说明 | | —- | —- | —- | —- | | res | Function | 是 | 支付结果回调 |
- 支付回调说明
{"code":"", "msg":""} //code值0代表成功, msg为对应code的描述
其他code描述:
订单状态 | 说明 |
---|---|
100 | 天猫精灵侧订单创建成功 |
200 | 交易创单成功 |
250 | 交易创单失败 |
300 | 支付创单成功 |
350 | 支付创单失败 |
400 | 用户支付成功 |
450 | 用户支付失败 |
470 | 用户待支付 |
- 支付样式:
创建订单:
支付宝支付:
- 使用示例:
//二维码支付
function qrcodePay() {
my.call('qrcodePay', {
sellerId: '3919645743',
content: '\{\"amount\":100,\"appId\":\"2019121169798623\",\"outItemId\":\"1000001\",\"outItemName\":\"豆腐\",\"outOrderId\":\"eebfce93-a760-415f-a6b5-4f0c9a1f3134\",\"payExpireTime\":1588908465797,\"sellerId\":3919645743}',
sign: 'lF9t3uBB3ZOIbvoFqIibcOgXI7SS8PHfm0ZKKb1DCXhRnvfmYTQwKHisUQh9ieg3u891ANPMEsPD3haySqzyC2+MJQJNutRduUOxFHsRTXuErKmoci1XtQJwez5Wh7A6CMBDYTykIWdZorP3zwf2ZtgcddasUj9kWq9eB1VkfgE='
},
function(res) {
my.alert({
content: JSON.stringify(res)
})
})
}
3、服务端HTTP支付结果回调
按照天猫精灵的协议规范,提供http请求地址给天猫精灵侧进行配置, 数据是放进body里的,开发者从body里获
取内容。
先按照协议规范进行自测,通过post请求,确认自己的接口是否可以接收到回调的数据。
目前经常发现开发者提供的接口400错误、500错误。所以先自测
- 回调接口是天猫精灵作为发起方,客户方作为提供方 | 说明 | 测试 | 生产 | 产生方式 | | —- | —- | —- | —- | | 请求方式 | POST | POST | http协议自带 | | RSA公钥 | | | 由天猫精灵提供给客户方,用于通知结果验签 |
- 业务请求参数 | 参数名 | 中文名 | 字段类型 | 产生方式 | 是否毕传 | | —- | —- | —- | —- | —- | | content | 业务参数 | String | 将业务参数转成json字符串得到 | 是 | | sign | 签名 | String | 将业务参数转成json字符串,使用RSA私钥加密得到 | 是 |
- 业务参数 | 参数名 | 中文名 | 字段类型 | 是否必传 | | —- | —- | —- | —- | | sellerId | 卖家id | Long | 是 | | appId | 商户入驻时分配的appId | String | 是 | | outOrderId | 商户的订单id | String | 是 | | orderId | 天猫精灵订单ID | String | 是 |
- 响应参数
无, 当前认为 httpstatus = 200 表示通知成功
加签验签说明
通过支付宝SDK提供的工具类进行加签验签操作。 可以在maven中央仓库下载到,版本选择3.7.80.ALL以上即可
https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
<dependency>
<groupId>alipay-sdk-java</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.7.80.ALL</version>
</dependency>
content: 需要加签的业务参数,json字符串
加签:
String sign = AlipaySignature.rsaSign(content, sysPriKey, "UTF-8", "RSA");
验签:
boolean signCheck = AlipaySignature.rsaCheck(content, sign2, sysPubKey, "UTF-8", "RSA");
预发环境公钥用于联调:
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1MI9xUzoikoZGpMkI3ymDNh/jg0hXAQyLhIZFCXo2R43BCXjR4iGgYMMZlnvYiblU8Oo8t+ojq5tYgVHHQNda/KDW1mLQuzA/pZGVDrk14LjEl3Fd6+FlOxDnl+oP25ZooqSdx7MpC7CN0TL7pi6KSm3e0blMScCA1uXD0/GSMq+J+eNdk3fBcQ2AVGeKCUaIzdLjiRVuOqHgnH4k6lK1g5wgovVNdg2fiAjqBX2NdmswsIwZpReHHnb0B7LlgYeHD1/oWpJ2JaZFBrS3iI3Kg1NSsVDzKn50VNe7r18DwaGt6GzCjNARnU3wgaLCOL9us674D10QnmdrcbH+5iObQIDAQAB
线上环境公钥
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuaZuqK6IjNO/Ji8hWvUubD+Rx1ty1AKzZYN/5jpcgcknAS5jiCHyYd1Y6jyk+9yJEmCB3l32VbDtYquIxuFImKPFlt+dv0c+3f0ABZTWbwO3Pw1szMKZEw232D/DPswzhHh7ROwdiqevCY6wWbpd/IxqKQ1eDPkAMwRgB9beiOnXHeH78CuxonAJpk5rGHi8I1mLsSjZHyEJhvIJ93bwkXb/l6sAtbNYwJPaKoc+1u6uRWn9PdOjc5Wk+OE8J95yh6zLh8sEoyYXFq3IC2S0wZuh01OMJLdIO3nhIeq4VLeXiDISPobOgd6+losHjWCxap5qgxLe/+fJdiFq2hfOwwIDAQAB
4、常见问题(Q&A)
1. 提供的入驻资料,对应字段解释具体含义?
字段解释可参考 支付宝开放文档中商户创建中对于字段解释
2. 验证签名失败
下单接口, 需要对数据加签。按照文档的方式先自我测试一遍。
3. 金额异常
订单最低金额是1分. amount是long型 不要传小数。
4. 密钥如何获取?
RSA密钥生成器生成。
5. appid和sellerid分别怎么获取
appid: 是商户的应用id,比如一个游戏公司旗下可能会有多款游戏,那么每个游戏都会有一个appid.这个appid用来区分商户的应用。
sellerid: 商户入驻的淘宝id。 联系天猫精灵获取
6. 密钥分几块?
- 用户下单, 需要商户对下单的数据进行加签。 这个地方商户生成RSA公私钥,商户通过私钥进行加签, 天猫精灵通过商户提供的公钥进行验签。
- 支付成功通知商户, 这个地方天猫精灵生成RSA公私钥,天猫精灵通过私钥进行加签, 商户通过天猫精灵提供的公钥进行验签。
7. 支付的限制条件
- 当前存在待支付订单数超过10条无法支付的限制,建议测试阶段设置过期时间小一些,或者 完成订单的支付
2. 订单过期时间默认15分钟,最长不要超过2天。 测试阶段建议设置小一些。