收藏
回答

只用微信云开发小程序,怎么处理微信支付的回调通知

微信支付成功的回调通知没办法触发云函数,所以似乎没有办法接收微信支付的回调通知,只能在云函数里主动查询支付结果。这样好像不是最佳实践,大家有没有其他办法?

回答关注问题邀请回答
收藏

2 个回答

  • 唐凯
    唐凯
    2020-04-08

    用云开发HTTP API呀,自己搭个小服务器专门接受支付回调,收到回调之后再调用云函数,或者通过http API操作云数据库,完成支付状态的接收

    2020-04-08
    有用 1
    回复
  • 黄秀杰
    黄秀杰
    2020-07-14

    办法是有的,在支付云函数中调用云函数,通过参数名functionName指定,如paycallback,然后实现paycallback接收参数outTradeNo,找到数据库的相应订单表,将它的状态改成已支付就可以。

    ```


    // 云函数入口函数

    exports.main = async (event, context) => {

      console.log('请求中')

      console.log(cloud.getWXContext().ENV)

      let { orderId, amount, body } = event

      const wxContext = cloud.getWXContext()

      const res = await cloud.cloudPay.unifiedOrder({

        body: body,

        outTradeNo: orderId,

        spbillCreateIp: '127.0.0.1',

        subMchId: '1447716902',

        totalFee: amount,

        envId: 'dinner-cloud',

        functionName: 'pay_cb'

      })

      return res.payment

    }

    ```

    ```

    // 云函数入口文件

    const cloud = require('wx-server-sdk')


    cloud.init({

      // API 调用都保持和云函数当前所在环境一致

      env: cloud.DYNAMIC_CURRENT_ENV

    })

    const db = cloud.database()


    // 云函数入口函数

    exports.main = async (event, context) => {

      console.log('支付回调')

      console.log(event)

      console.log(cloud.getWXContext().ENV)

      const orderId = event.outTradeNo

      const resultCode = event.resultCode

      if (resultCode === 'SUCCESS') {

        const res = await db

          .collection('Order')

          .doc(orderId)

          .update({

            data: {

              status: 1

            }

          })

        console.log(res)

        return { errcode: 0 }

      }

    }


    ```



    2020-07-14
    有用
    回复 2
    • Sigma
      Sigma
      2021-01-19
      使用了云函数支付,回调函数一直不触发。有遇到过这种情况吗?
      2021-01-19
      回复
    • 黄秀杰
      黄秀杰
      2021-01-21回复Sigma
      印象中有,一般都是假象,没看到而已。
      2021-01-21
      回复
登录 后发表内容
问题标签