易者
易者
  • 发布:2023-06-07 17:51
  • 更新:2023-06-13 17:20
  • 阅读:253

【报Bug】uni-pay-co的URL化请求问题

分类:uniCloud

产品分类: uniCloud/App

示例代码:

见BUG 描述

操作步骤:

见BUG 描述

预期结果:

见BUG 描述

实际结果:

见BUG 描述

bug描述:

因为小程序使用uni-pay2需要URL化请求uni-pay-co,在开发者工具中用微信小程序请求URL化后的uni-pay-co,报错“FunctionBizError:不支持的支付方式wxpay-devtools”,经检查,是uni-pay-co中的函数把小程序端的uni.request的参数clientInfo中的platform识别错了,应该取用clientInfo中的uniPlatform字段值而不是platform字段值,在小程序端的uni.request的参数中手动更改clientInfo为{platform: uni.getSystemInfoSync().uniPlatform}才能正常使用支付功能。希望更改此bug。

2023-06-07 17:51 负责人:DCloud_uniCloud_VK 分享
已邀请:
DCloud_uniCloud_VK

DCloud_uniCloud_VK

uni.request这个请求是不带clientInfo的, 你的clientInfo是你自己传的吧?

你是不是这样写的

uni.request({  
  url: "xxxxx",  
  data: {  
    clientInfo: uni.getSystemInfoSync()  
  }  
});

并没有说clientInfo就是uni.getSystemInfoSync()

  • 易者 (作者)

    是这样写的,但如果不改,在小程序端用uni-pay2支付,会报错不支持的支付方式。小程序端用的uni.request请求云端接口,uniPlatform和platform都会上报,但platform报的是wxpay-devtools,而uniPlatform报的才能正确通过。

    2023-06-13 11:09

DCloud_uniCloud_VK

DCloud_uniCloud_VK

还有,既然你用uni.request请求,代表还是uniapp项目,那为什么不用callFunction来调用呢? callFunction也支持多空间

  • 易者 (作者)

    callFunction难道不是只能在云端使用吗?那只有用unicloud的服务空间的时候,客户端是H5才能用callFunction,但如果客户端是uniapp编译成的小程序上线后请求云端API,不是只能用uni.request吗?

    2023-06-13 11:12

  • DCloud_uniCloud_VK

    回复 易者: 只要是uniapp开发的app、小程序、h5 都可以用callFunction来调用云函数的

    2023-06-13 11:43

  • 易者 (作者)

    回复 DCloud_uniCloud_VK: 用callFunction来调用云函数,是不是只能调用普通云函数,不能调用云对象,即使云对象URL化了也不行,那就是说,如果小程序端要使用uni-pay-co和uni-id-co,都不能用callFunction而只能用uni.request?因为uni-pay-co和uni-id-co写的是云对象。

    2023-06-13 16:38

DCloud_uniCloud_VK

DCloud_uniCloud_VK

我说完整一点

只要uniapp开发的h5、小程序、app,都能直接调用云函数或云对象。

云函数

用callFunction来调用

uniCloud.callFunction({  
  name: '云函数名',  
  data: {   
    a: 1   
  },  
  success(){},  
  fail(){},  
  complete(){}  
});

云对象

已 uni-id-co 为例

const uniIdCo = uniCloud.importObject('uni-id-co');  
await uniIdCo.login({  
  username: "admin",  
  password: "123456",  
  captcha: "6666"  
})

还可以直接调用别的服务空间内的云函数和云对象

云函数

用callFunction来调用

const myCloud = uniCloud.init({  
  provider: 'aliyun',  
  spaceId: 'xxxx-yyy',  
  clientSecret: 'xxxx'  
});  
myCloud.callFunction({  
  name: '云函数名',  
  data: {   
    a: 1   
  },  
  success(){},  
  fail(){},  
  complete(){}  
});

云对象

已 uni-id-co 为例

const myCloud = uniCloud.init({  
  provider: 'aliyun',  
  spaceId: 'xxxx-yyy',  
  clientSecret: 'xxxx'  
});  
const uniIdCo = myCloud.importObject('uni-id-co');  
await uniIdCo.login({  
  username: "admin",  
  password: "123456",  
  captcha: "6666"  
})
  • 易者 (作者)

    很详细,谢谢!也就是说,用uniapp开发的h5、小程序、app等不同的客户端,只要请求的服务端是unicloud的服务空间,就可以用callFunction和importObject完全替代uni.request了,只有在不同客户端请求的服务端不是unicloud的服务空间的时候才用uni.request。看来是我之前理解错了。

    2023-06-13 18:25

  • 易者 (作者)

    但是小程序端的callFunction和importObjec又没有指定请求URL的地方,怎么能把请求发送到unicloud的正确的服务空间地址去呢?

    2023-06-13 18:57

  • DCloud_uniCloud_VK

    回复 易者: 我上面不是说了吗,可以先执行uniCloud.init,初始化指定你要访问的空间

    2023-06-13 19:40

  • 易者 (作者)

    回复 DCloud_uniCloud_VK: 明白了,刚也看到了文档里面说uniCloud.init方法接受一个options参数,options参数里有endpoint字段,看到endpoint字段大概就能理解了。谢谢耐心回复!

    2023-06-13 21:40

要回复问题请先登录注册