注意:小程序授权回调,请务必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
(授权令牌)和授权的主子账号信息。
1 2 3 4 5 6 7 8 9 10 11 | { "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" } } |
格式化如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | { "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)与外部服务的数据打通需要通过云网关,如果使用的是空应用,那么可以直接调用空应用的域名白名单,无需额外的申请。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | //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 } }); console.log(JSON.stringify(result)); } catch (e) { my.alert({ content: 'error ' + e.message }); } } |
说明:通过外发 HTTP 请求获取系统参数,例如openUid。
外发 HTTP 请求时, 可把小程序前端的上下文context 作为参数传出,如下图所示:
参数说明,如下图所示: