注意:小程序授权回调,请务必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 作为参数传出,如下图所示:
参数说明,如下图所示: