1、开发测试

相关软件配置

  • 天猫精灵容器版本 需要2.3.233.0版本及以上(检查容器版本方法: adb shell dumpsys package com.alibaba.ailabs.genie.webapps | grep versionName打印容器版本, 若容器版本过低,请联系天猫精灵方为您单独推送测试容器)

打开方式

  • 支付宝小程序IDE推送到设备预览

2、小程序API

获取精灵账号信息

  • API: my.call(‘getGenieUserInfo’)
  • 功能:获取精灵账号信息
  • 使用示例:
    1. my.call('getGenieUserInfo', function(result) {
    2. my.alert({
    3. content: JSON.stringify(result) // userId
    4. })
    5. })

二维码支付

  • 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加签说明(服务端)

  1. 通过支付宝SDK提供的工具类进行加签验签操作。 可以在maven中央仓库下载到,版本选择3.7.80.ALL以上即可
  2. https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
  3. <dependency>
  4. <groupId>alipay-sdk-java</groupId>
  5. <artifactId>alipay-sdk-java</artifactId>
  6. <version>3.7.80.ALL</version>
  7. </dependency>
  8. content: 需要加签的业务参数,json字符串
  9. 加签:
  10. String sign = AlipaySignature.rsaSign(content, sysPriKey, "UTF-8", "RSA");
  11. 验签:
  12. boolean signCheck = AlipaySignature.rsaCheck(content, sign2, sysPubKey, "UTF-8", "RSA");

常见的下单后无法唤起收银台的问题:

  1. content的内容是json字符串, 但是被二次转义处理了,导致天猫精灵测验签失败

    1. 正例:
    2. {\"amount\":19801,\"appId\":\"2021001140639410\",\"outItemId\":\"1000001\",\"outItemName\":\"VIP会员\",\"outOrderId\":\"102247420200401104523\",\"payExpireTime\":1585709123000,\"sellerId\":22070615698}"
    3. 反例:
    4. \"{\\\"amount\\\":19801,\\\"appId\\\":\\\"2021001140639410\\\",\\\"outItemId\\\":\\\"1000001\\\",\\\"outItemName\\\":\\\"VIP会员\\\",\\\"outOrderId\\\":\\\"1021456202031172814\\\",\\\"payExpireTime\\\":1585646894000,\\\"sellerId\\\":2207615698}\"
  2. 商品金额的单位是分,切记!!!

  3. content里面部分字段含有特殊的转义字符,例如: “outItemName\”:\”VIP\u4f1a\u5458\”
  4. content字符串顺序发生变更,加密的字符串顺序和传给天猫精灵的字符串顺序不一致。
  • response:支付结果回调 | 回调方法 | 类型 | 必填 | 说明 | | —- | —- | —- | —- | | res | Function | 是 | 支付结果回调 |
  • 支付回调说明
    1. {"code":"", "msg":""} //code值0代表成功, msg为对应code的描述

其他code描述:

订单状态 说明
100 天猫精灵侧订单创建成功
200 交易创单成功
250 交易创单失败
300 支付创单成功
350 支付创单失败
400 用户支付成功
450 用户支付失败
470 用户待支付
  • 支付样式:

创建订单:
image.png

支付宝支付:
image.png

  • 使用示例:
    1. //二维码支付
    2. function qrcodePay() {
    3. my.call('qrcodePay', {
    4. sellerId: '3919645743',
    5. content: '\{\"amount\":100,\"appId\":\"2019121169798623\",\"outItemId\":\"1000001\",\"outItemName\":\"豆腐\",\"outOrderId\":\"eebfce93-a760-415f-a6b5-4f0c9a1f3134\",\"payExpireTime\":1588908465797,\"sellerId\":3919645743}',
    6. sign: 'lF9t3uBB3ZOIbvoFqIibcOgXI7SS8PHfm0ZKKb1DCXhRnvfmYTQwKHisUQh9ieg3u891ANPMEsPD3haySqzyC2+MJQJNutRduUOxFHsRTXuErKmoci1XtQJwez5Wh7A6CMBDYTykIWdZorP3zwf2ZtgcddasUj9kWq9eB1VkfgE='
    7. },
    8. function(res) {
    9. my.alert({
    10. content: JSON.stringify(res)
    11. })
    12. })
    13. }

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 表示通知成功

加签验签说明

  1. 通过支付宝SDK提供的工具类进行加签验签操作。 可以在maven中央仓库下载到,版本选择3.7.80.ALL以上即可
  2. https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java
  3. <dependency>
  4. <groupId>alipay-sdk-java</groupId>
  5. <artifactId>alipay-sdk-java</artifactId>
  6. <version>3.7.80.ALL</version>
  7. </dependency>
  8. content: 需要加签的业务参数,json字符串
  9. 加签:
  10. String sign = AlipaySignature.rsaSign(content, sysPriKey, "UTF-8", "RSA");
  11. 验签:
  12. 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. 密钥如何获取?

  1. RSA密钥生成器生成。

5. appid和sellerid分别怎么获取

appid: 是商户的应用id,比如一个游戏公司旗下可能会有多款游戏,那么每个游戏都会有一个appid.这个appid用来区分商户的应用。
sellerid: 商户入驻的淘宝id。 联系天猫精灵获取

6. 密钥分几块?

  1. 用户下单, 需要商户对下单的数据进行加签。 这个地方商户生成RSA公私钥,商户通过私钥进行加签, 天猫精灵通过商户提供的公钥进行验签。
  2. 支付成功通知商户, 这个地方天猫精灵生成RSA公私钥,天猫精灵通过私钥进行加签, 商户通过天猫精灵提供的公钥进行验签。

7. 支付的限制条件

  1. 当前存在待支付订单数超过10条无法支付的限制,建议测试阶段设置过期时间小一些,或者 完成订单的支付
    2. 订单过期时间默认15分钟,最长不要超过2天。 测试阶段建议设置小一些。