自研支付宝插件能否使用官方小程序消息订阅插件?
支付老李
结论
可以配合使用,但一般不能在自研插件内部直接嵌套另一个支付宝小程序插件,也不能直接声明对它的依赖。
建议由宿主小程序开通消息订阅能力,并引入支付宝官方消息订阅插件。自研插件只向宿主小程序发送订阅请求事件,具体的授权和订阅操作由宿主小程序完成。
相关能力、组件名称和接入参数可能随支付宝开放平台调整,请以当前控制台中的接入文档为准。
接入步骤
1. 在宿主小程序开通消息订阅能力
登录支付宝开放平台,在宿主小程序对应的应用中完成以下配置:
- 开通小程序消息订阅能力。
- 创建或申请所需的消息模板。
- 获取模板 ID。
- 如果平台要求添加官方插件,在小程序后台完成插件添加或授权。
- 确认宿主小程序和消息模板均可正常使用。
消息模板和订阅资格通常属于宿主小程序,不属于自研插件。
2. 由宿主小程序声明官方插件
如果当前官方方案要求使用插件组件,应在宿主小程序的 app.json 中声明插件,不要写入自研插件的 plugin.json。
{
"plugins": {
"messageSubscribe": {
"version": "<官方要求的版本号>",
"provider": "<官方插件的 provider AppId>"
}
}
}
然后在需要显示订阅入口的宿主页面中注册官方组件:
{
"usingComponents": {
"message-subscribe": "plugin://messageSubscribe/<官方导出的组件路径>"
}
}
provider、版本号、组件路径和组件属性都必须使用支付宝开放平台当前文档提供的实际值,不要自行猜测。
3. 自研插件向宿主页面发送订阅请求
用户执行明确操作后,自研插件中的组件可以通知宿主页面:
Component({
methods: {
requestMessageSubscription() {
this.triggerEvent('subscribeRequest', {
scene: 'order-status'
});
}
}
});
插件组件模板示例:
<button onTap="requestMessageSubscription">
订阅订单状态通知
</button>
宿主页面监听该事件:
<custom-plugin-component
onSubscribeRequest="handleSubscribeRequest"
/>
<message-subscribe
a:if="{{showSubscribeComponent}}"
template-id="{{templateId}}"
/>
宿主页面逻辑:
Page({
data: {
showSubscribeComponent: false,
templateId: ''
},
handleSubscribeRequest(event) {
const { scene } = event.detail;
this.setData({
showSubscribeComponent: true,
templateId: this.getTemplateId(scene)
});
},
getTemplateId(scene) {
const templateMap = {
'order-status': '<订单状态消息模板 ID>'
};
return templateMap[scene] || '';
}
});
这里的 message-subscribe 和 template-id 仅用于展示整体结构。官方组件的真实名称、属性、事件回调和组件路径,需要按照当前支付宝开放平台文档替换。
使用 API 接入的情况
如果支付宝当前为目标场景提供 my.requestSubscribeMessage,宿主小程序也可以直接调用该 API,无需通过自研插件调用:
my.requestSubscribeMessage({
entityIds: ['<订阅实体或模板标识>'],
success(result) {
console.log('订阅请求完成', result);
},
fail(error) {
console.error('订阅请求失败', error);
}
});
关于 entityIds 的具体含义、是否必填以及返回数据结构,请查看当前版本的官方 API 文档。示例中的占位符不能直接用于生产环境。
服务端发送消息
用户完成订阅授权后,支付宝不会因此自动发送业务消息。业务系统通常还要完成以下工作:
- 保存用户的授权结果及对应的业务关系。
- 在符合模板场景时,通过服务端调用支付宝提供的消息发送接口。
- 按照模板要求填写参数。
- 处理订阅失效、用户拒绝、发送次数受限和接口调用失败等情况。
应用私钥不应保存在插件端。需要签名的调用、令牌管理和消息发送,也应交给宿主应用的服务端处理。
注意事项
- 订阅授权需要由用户主动操作触发,不要在页面加载时强制弹出。
- 自研插件所在的宿主小程序必须已开通相应能力,并拥有可用的消息模板。
- 插件与宿主小程序之间可能存在运行域、路由和配置隔离。不要假设插件可以直接读取宿主的
app.json,也不要假设它能直接调用宿主页面的方法。 - 自研插件能否直接依赖另一个插件,取决于支付宝当前的插件依赖规则。如果平台不支持插件嵌套,可以让自研插件触发事件,再由宿主小程序完成订阅。
- 官方消息订阅插件的
provider、版本号、组件路径、属性和回调名称可能变化,接入前需要在支付宝开放平台核对。 - 用户同意订阅不代表永久授权。发送次数、有效期和允许发送的场景,以对应模板和平台规则为准。
- 真机环境、开发版、体验版和正式版的权限表现可能不同。发布前应使用真实的应用配置进行验证。
备注:内容仅供参考。
