被共享环境的小程序前端部分代码,sharedCloud是我初始化后的正确的共享环境实例,这个没有问题:
// 调用微信支付工作流
await sharedCloud.callFunction({
name: 'cloudbase_module',
data: {
// 工作流ID
name: '我隐藏了,此为微信支付的工作流id',
data: {
description: `购买${realOrderData.packageName}`,
out_trade_no: realOrderData.outTradeNo,
amount: {
total: Math.round(realOrderData.price * 100) // 使用后端验证过的真实价格
},
// 附加数据,使用简单键值对
attach: `packageId=${realOrderData.packageId}`
}
},
success: res => {
wx.hideLoading();
console.log('下单结果:', res);
// 检查是否有错误
if (res.result && res.result.errcode) {
this.setData({ isProcessing: false });
wx.showToast({
title: '创建支付失败',
icon: 'none'
});
console.error('支付创建失败,错误:', res.result.errmsg);
return;
}
后台执行报错:
支付创建失败,错误: {"message":"微信支付SDK请求失败, 响应码:400,错误码:PARAM_ERROR, 错误信息: 输入源“/body/payer/openid”映射到字段“用户标识”必填性规则校验失败,此字段为必填项"}(env: Windows,mp,1.06.2412050; lib: 3.8.1)
--------共享环境的那个小程序就可以自动注入openid,为啥这个不行,商户号已经关联并授权了。
感谢各位,已经解决,记录一下
1、解答上面的问题
B中因为是共享环境,所以获取B的openid需要context.FROM_OPENID获取,这样解决了上面的问题;
2、解决上面问题后引发新的问题,报appid和openid不匹配
这里,因为我是B调用A共享的支付工作流,A共享环境给B,B调用微信支付工作流需要单独建一个,因为A的微信支付工作流在工作流参数里有一个appid是必填的,那里只能写A的appid。B单独建立一个支付工作流填B的appid问题搞定。