张灯那个结彩
张灯那个结彩
  • 发布:2023-12-15 16:46
  • 更新:2023-12-16 05:15
  • 阅读:203

微信商家转账到零钱,出口IP不能用

分类:uniCloud

阿里云,根据https://doc.dcloud.net.cn/uniCloud/cf-functions.html#eip,将5个IP加入到微信后,返回
{ Error: errCode: INVALID_REQUEST | errMsg: 此IP地址不允许调用该接口 }

PS:转账到零钱功能是根据https://gitee.com/dcloud/uniPay.git中1.1.1增加了transfer方法
/**

  • 商家付款到零钱
  • @param {string} params.outBatchNo 转账批次
  • @param {string} params.subject 标题
  • @param {string} params.body 转账说明
  • @param {number} params.totalFee 转账总金额,分
  • @param {string} params.openid 对方微信opendi
  • @return {Promise<>}
    /
    async transfer (params) {
    if (!params.out_batch_no) throw new Error('outBatchNo required')
    if (!params.batch_remark) throw new Error('body required')
    if (!params.total_amount) throw new Error('totalFee required')
    if (!params.openid) throw new Error('openid required')

    params.transfer_detail_list = [{
    out_detail_no: params.out_batch_no,
    transfer_amount: params.total_amount,
    transfer_remark: params.batch_remark,
    openid: params.openid,
    user_name: params.user_name
    }]

    params.total_num = 1
    params.appid = this.options.appId
    delete params.openid
    delete params.user_name

    return await this._request('/v3/transfer/batches', params, 'POST')
    }

2023-12-15 16:46 负责人:无 分享
已邀请:
张灯那个结彩

张灯那个结彩 (作者)

还是自己来解决吧。
前述文档中eip过于简略,详见HX里HBuilderX\plugins\hbuilderx-language-services\builtin-dts\node_modules\@dcloudio\types\uni-cloud-server\extension\eip.d.ts。
贴上代码,供大家参考吧。注意eip的返回值,一开始就掉这个坑里的,然后转request再转回eip。

async transfer(params) {  
    ...  
    const platformCert = await this._getPlatformCert()  
    return await this._requestEip(  
        '/v3/transfer/batches',   
        params,  
        'POST',  
        { 'Wechatpay-Serial': platformCert.certificate.serialNumber })  
}  

async _requestEip (action, params, method = 'GET', successStatusCode = 200, headersExtra = {}) {  
    params = camel2snakeJson(params)  
    const authorization = this._getAuthorization(method, action, params)  
    let { statusCodeValue: status, body: data = {}, headers } = await uniCloud.httpProxyForEip.postJson(  
        `${this._baseURL}${action}`,  
        params,  
        {  
            Accept: 'application/json',  
            'content-type': 'application/json',  
            Authorization: authorization,  
            ...headersExtra  
    })  

    if (status !== successStatusCode) {  
      throw new UniCloudError({  
        code: data.code,  
        message: data.message  
      })  
    }  
    if (!data) data = {}  
    // 响应签名验证  
    await this._verifyResponseSign(headers, data)  

    if (data.appid) data.appId = data.appid  
    if (data.mchid) data.mchId = data.mchid  

    return snake2camelJson(data)  
  }

返回

{ Error: errCode: NOT_ENOUGH | errMsg: 资金不足  
    at c._requestEip (/tmp/function/@common_modules/uni-pay/index.js:33:162198)  
    at <anonymous>  
    at process._tickCallback (internal/process/next_tick.js:189:7) errMsg: '资金不足', errCode: 'NOT_ENOUGH' }

说明调用已经正确了。

另外unipay中微信公共证书每个启动实例都要下载一次,可能太频繁了,腾讯的示例里是60分钟。

  • 张灯那个结彩 (作者)

    transfer调用requestEip入参BUG,少写一个successStatusCode参数,应该是200

    2023-12-16 14:53

  • 张灯那个结彩 (作者)

    httpProxyForEip返回的headers和request返回的格式不致,要做归一化处理

    2023-12-16 18:35

要回复问题请先登录注册