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天。 测试阶段建议设置小一些。