收藏
回答

在云函数 调用微信支付 pay.refund 退款 处理时报错 Error: Unexpecte?

      console.log('执行refund')
      // const { out_trade_no } = data;
      // console.log(out_trade_no)
      // var payStatus = ''  //如果支付状态码不存在的话 会默认为4 已取消的状态
      //1.启动关闭订单微信支付函数  微信支付侧也要进行关闭
      const { return_code, ...restData } = await pay.refund({
        out_trade_no:'oIouB4s-1605164591771'//商户订单号
        out_refund_no:`refund_oIouB4s-1605164591771`,  //商户退款单号 //多次退款需要用不同的退款单号,这里先只考虑退一次
        total_fee:1,  //订单金额
        refund_fee:1,  //退款金额
      });


附上报错的图片

报错的函数出处

通过打印,获得上面函数 xmlStr的值如下图

官方文档退款链接为:https://api.mch.weixin.qq.com/secapi/pay/refund 好像打开也是这个错误,说什么要证书,大概是这个接口在云开发中不能用了吧。

附上pay.refund 的出处

其中,用到的退款字段 都拥有了,出处在下图


求助各位大佬,帮忙看看,难道是官方的集成出了问题吗?

方法二尝试:

官方文档出处:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/open/pay/CloudPay.refund.html

后来我又用了网上这篇文章的https://blog.csdn.net/weixin_44700966/article/details/108338940 api退款方式,但是每次查询出来的就说订单不存在,实际上是存在的

潜在背景:生成的订单不是通过服务商模式生成的,也许就是提示订单不存在。我知道为什么了,明天试试。

    // 申请退款 客户买完后,后悔了 全额退款 或者 我们官方售后,对其进行部分退款
    case 'refund':{
      console.log('执行refund')
      const { out_trade_no } = data;
      console.log(out_trade_no)
      // var payStatus = ''  //如果支付状态码不存在的话 会默认为4 已取消的状态
      //1.启动关闭订单微信支付函数  微信支付侧也要进行关闭
      const { return_code, ...restData } = await cloud.cloudPay.refund({
        sub_mch_id:MCHID,  //子商户号
        out_trade_no, //商户订单号
        nonce_str:'63wiIZm2APFdYhNw',
        out_refund_no:`refund_${out_trade_no}`,  //商户退款单号 //多次退款需要用不同的退款单号,这里先只考虑退一次
        total_fee:1,  //订单金额
        refund_fee:1,  //退款金额
      });

      console.log(return_code)
      console.log(restData)
      return
    }


我这样写为什么提示我订单不存在呢?是不是因为mchid不是我们的?但是 强行写成我们的也不会改过来。授权啥的都开了。

以下这张图是在微信商户助手中查到的

最后一次编辑于  2020-11-12
回答关注问题邀请回答
收藏

1 个回答

  • VX小程序: 百熟优质果  运营合作
    VX小程序: 百熟优质果 运营合作
    2020-11-12

    我好像知道方法二为什么说订单不存在了,采用了方法二相当于是使用了云开发平台作为服务商,那么生成的订单必须是经过服务商生成的才会提示订单存在。之前用的最早的官方pay.*之类的都要换成服务商的接口调用,或许就可以了。明天试试。

    2020-11-12
    有用 2
    回复
登录 后发表内容
问题标签