注意:小程序授权回调,请务必code换token否则等于未授权。
案例填写:https://www.baidu.com/?wd=hello
唤起小程序时(真机联调时), 会唤起授权弹窗。
商家点击确认授权小程序时,平台后端会异步访问http url :https://www.baidu.com/?wd=hello&code=rLVVxlAN7KdVxzaOK5exxxx6160&state=1212
说明:测试时使用。
开发测试时,可登录商家账号,然后手动拼接 url 放在浏览器访问https://oauth.taobao.com/tac/authorize?response_type=code&client_id=${appkey}&redirect_uri=${url}&state=test&view=web 需替换appkey 和正确的配置的回调url。
点击确认授权后 也会重定向访问 http url:https://www.baidu.com/?wd=hello&code=rLVVxlxxxxxxxx6160&state=1212
ISV 服务端可收到该 url 的 http 请求 可获取到 url 参数里的 code,然后 ISV 可使用 code 通过taobao.top.auth.token.create API获取 access_token(授权令牌)和授权的主子账号信息。
{
"top_auth_token_create_response": {
"token_result": "{\"w1_expires_in\": 31466485,\"refresh_token_valid_time\": 1663585353000,\"
"taobao_user_nick\": \"%Exxxx80%E**\",\"re_expires_in\": 0,\expire_time\": 1695121354000,\"
"token_type\": \"Bearer\",\"access_token\": \"6201bxxxx89181\",\"taobao_open_uid\": \"AAEQ54xxxxxraBMS\",\"
"w1_valid\": 1695121354243,\"refresh_token\": \"62f6339f91ecxxxx264181\",\"w2_expires_in\": 0,\"
"w2_valid\": 1663587153219,\"r1_expires_in\": 31466485,\"r2_expires_in\": 189684,\"
"r2_valid\": 1663844553219,\"r1_valid\": 1695121354243,\"taobao_user_id\": \"22xx1\",\"
"expires_in\": 31466485}","request_id": "x2degl8qzzy0"
}
}
格式化如下:
{
"refresh_token_valid_time": 1728889926759,
"parent_open_uid": "AAExxxxxraBMS",
"expire_time": 1731481926759,
"open_uid": "AAGm8Lxxxx1br0xx",
"locale": "zh_CN",
"user_nick": "%E6%xxxx%B701",
"access_token": "6201bxxxx89181",
"refresh_token": "5000xxxxbs3rLqx",
"w1_valid": 1731481926759,
"w2_valid": 1728891726759,
"user_id": "221xxxx845",
"parent_id": "221xxxx888",
"parent_nick": "%E6xxxx",
"r2_valid": 1729149126759,
"r1_valid": 1731481926759,
"sp": "tbUIC"
}
需要留存商家主子账号关系 及关键信息(open_uid - access_token - 过期时间)。
注意:
1)新老授权的 授权域名不同,建议通过API调用获取(API测试工具),若要用curl需确保域名是新域名(tac)。
2)当用主账号授权时或子账号授权时,字段语义不同。
3)明文中的 userId 和 parentId 两个参数,后续将不会透出,请使用密文 open_uid、parent_open_uid,对应其他平台的open_id、main_user_open_id等字段命名,值相同,可关联映射识别当前用户身份,若对授权有更多疑问,可参考授权说明。
4)访问取消授权工具,然后用已有授权的(子)账号登录,然后去网页去取消当前(子)账号的授权。
说明:小程序前端 HTTP 外发请求到外网 ISV 服务端,禁止使用云函数,共享资源池,各种使用有限制。
可查看淘宝服务小程序接入指南相关文档,文档中详细介绍了选型使用和常用功能的介绍,比如openid,授权等。同时也包含空应用创建流程【云资源部署在淘外】域名白名单外发请求。
示例代码:
说明:
1)支付宝小程序访问外部服务时,在后台配置域名白名单或者IP白名单后,使用my.request发起请求,可以访问外部服务,淘小程序不支持直接使用my.request方式访问外部服务。
2)与外部服务的数据打通需要通过云网关,如果使用的是空应用,那么可以直接调用空应用的域名白名单,无需额外的申请。
//app.js文件初始化示例代码
import cloud from '@tbmp/mp-cloud-sdk';
cloud.init({
//test、online
env: 'test'
});
App({
cloud,
onLaunch(options) {
//执行相关代码
}
});
----------------------------------
//page调用接口的方法
async httptest (){
const {cloud} = getApp();
try {
const result = await cloud.application.httpRequest({
//不需要完整域名,只需要接口访问路径即可
'path' : '/miniapp/test',
'method':'POST',
//POST请求需要指定下请求格式,只支持application/json。 如:"content-type":"application/json;charset=UTF-8"
'headers':{ "Content-Type":"application/json;charset=UTF-8"},
'params':{ "name":"cx", "age": 18, },
'body':{ "xftest":"hhh", "id":"1234", },
//对于一个小程序关联多个云应用的场景,调用非默认云应用,需要指定对应的云应用Id,超时时间单位ms
'exts':{
"cloudAppId":"123" ,
"timeout":100,
//空应用调用需要填写该字段,包括协议头以及端口号(可省略),支持http、https
"domain":"https://www.taobao.com"
} });
console.log(JSON.stringify(result));
} catch(e) {
my.alert({
content: 'error ' + e.message
});
}
}
说明:通过外发 HTTP 请求获取系统参数,例如openUid。
外发 HTTP 请求时, 可把小程序前端的上下文context 作为参数传出,如下图所示:
参数说明,如下图所示: