收藏
回答

云函数方式调用企业付款接口报错mac verfify failure

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wxb301d180c5dbad48 env-01-5gxaprlj46fcceb2 3.4.5

在云函数中(共享的云环境)使用tenpay库 调用企业付款接口进行提现,商户32位密钥已经指定,同时

pfx: require('fs').readFileSync('apiclient_cert.p12'), //证书初始化

const config = {

  appid: 'xxx', //小程序Appid

  envName: 'xxx', // 小程序云开发环境ID

  mchid: 'xxx', //商户号

  partnerKey: 'xxx', //此处填服务商密钥

  pfx: require('fs').readFileSync('apiclient_cert.p12'), //证书初始化

  actionName:'xxx',

  rate:0 

};



  let result = await pay.transfers({

        partner_trade_no: 'scorereflect' + Date.now() + num,

        openid: userInfo._openid,

        check_name: 'NO_CHECK',

        amount: parseInt(num* (100 - config.rate),

        desc: config.actionName,

  });


每次结果都报错:

报错:Error: cloud.callFunction:fail Error: errCode: -504002 functions execute fail | errMsg: Error: mac verify failure, POST https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers -1 (connected: false, keepalive socket: false, socketHandledRequests: 0, socketHandledResponses: 0)

headers: {}

    at configSecureContext (node:internal/tls/secure-context:276:15)

    at Object.createSecureContext (node:_tls_common:116:3)

    at Object.connect (node:_tls_wrap:1621:48)

    at Agent.createConnection (node:https:143:22)

    at Agent.createSocket (node:_http_agent:341:26)

    at Agent.addRequest (node:_http_agent:292:10)

    at new ClientRequest (node:_http_client:305:16)

    at Object.request (node:https:353:10)

    at Object.requestWithCallback (/var/user/node_modules/urllib/lib/urllib.js:1051:19)

最后一次编辑于  2024-09-29
回答关注问题邀请回答
收藏

7 个回答

  • 社区运营同学
    社区运营同学
    2024-09-29

    1.检查参数签名:

    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。

    2.验证APPID和MCHID:

    • 确认请求参数中包含正确的 APPID  和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。

    3.检查请求方法:

    • 确保请求是通过 POST 方法提交的。

    4.查看云函数日志:

    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。



    2024-09-29
    有用
    回复
  • 社区运营同学
    社区运营同学
    2024-09-29

    1.检查参数签名:

    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。

    2.验证APPID和MCHID:

    • 确认请求参数中包含正确的 APPID  和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。

    3.检查请求方法:

    • 确保请求是通过 POST 方法提交的。

    4.查看云函数日志:

    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。

    5.重新生成签名:

    • 如果签名生成过程中使用了时间戳或随机字符串,请确保每次请求的这些参数都是唯一的。

    6.检查系统时间:

    • 确保服务器的系统时间与实际时间一致,时间差异可能导致签名验证失败。


    2024-09-29
    有用
    回复
  • 社区运营同学
    社区运营同学
    2024-09-29

    1.检查参数签名:

    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。

    2.验证APPID和MCHID:

    • 确认请求参数中包含正确的 APPID  和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。

    3.检查请求方法:

    • 确保请求是通过 POST 方法提交的。

    4.查看云函数日志:

    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。

    5.重新生成签名:

    • 如果签名生成过程中使用了时间戳或随机字符串,请确保每次请求的这些参数都是唯一的。

    6.检查系统时间:

    • 确保服务器的系统时间与实际时间一致,时间差异可能导致签名验证失败。


    2024-09-29
    有用
    回复
  • 社区运营同学
    社区运营同学
    2024-09-29


    1. 检查参数签名:
    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。

    2.验证APPID和MCHID:

    • 确认请求参数中包含正确的 APPID  和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。

    3.检查请求方法:

    • 确保请求是通过 POST 方法提交的。

    4.查看云函数日志:

    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。

    5.重新生成签名:

    • 如果签名生成过程中使用了时间戳或随机字符串,请确保每次请求的这些参数都是唯一的。

    6.检查系统时间:

    • 确保服务器的系统时间与实际时间一致,时间差异可能导致签名验证失败。


    2024-09-29
    有用
    回复
  • 社区运营同学
    社区运营同学
    2024-09-29

    当您通过云函数调用企业付款接口时,如果遇到 mac verify failure 错误,通常是由于签名验证失败导致的。

    解决方案

    1. 检查参数签名:
    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。

    2.验证APPID和MCHID:

    • 确认请求参数中包含正确的 APPID  和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。

    3.检查请求方法:

    • 确保请求是通过 POST 方法提交的。

    4.查看云函数日志:

    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。

    5.重新生成签名:

    • 如果签名生成过程中使用了时间戳或随机字符串,请确保每次请求的这些参数都是唯一的。

    6.检查系统时间:

    • 确保服务器的系统时间与实际时间一致,时间差异可能导致签名验证失败。


    2024-09-29
    有用
    回复
  • 社区运营同学
    社区运营同学
    2024-09-29

    当您通过云函数调用企业付款接口时,如果遇到 mac verify failure 错误,通常是由于签名验证失败导致的。

    解决方案

    1. 检查参数签名:
    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。

    2.验证APPID和MCHID:

    • 确认请求参数中包含正确的 APPID 和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。

    3.检查请求方法:

    • 确保请求是通过 POST 方法提交的。

    4.查看云函数日志:

    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。

    5.重新生成签名:

    • 如果签名生成过程中使用了时间戳或随机字符串,请确保每次请求的这些参数都是唯一的。

    6.检查系统时间:

    • 确保服务器的系统时间与实际时间一致,时间差异可能导致签名验证失败。


    2024-09-29
    有用
    回复
  • 社区运营同学
    社区运营同学
    2024-09-29

    当您通过云函数调用企业付款接口时,如果遇到 mac verify failure 错误,通常是由于签名验证失败导致的。

    解决方案

    1. 检查参数签名:
    • 确保所有请求参数都按照指引正确填写。
    • 使用正确的签名算法对参数进行签名。
    1. 验证APPID和MCHID:
    • 确认请求参数中包含正确的 APPID 和 MCHID
    • 检查 APPID 和 MCHID 是否存在且有效。
    1. 检查请求方法:
    • 确保请求是通过 POST 方法提交的。
    1. 查看云函数日志:
    • 通过 云函数日志 查询详细的错误信息,查看是否有更具体的错误提示。
    1. 重新生成签名:
    • 如果签名生成过程中使用了时间戳或随机字符串,请确保每次请求的这些参数都是唯一的。
    1. 检查系统时间:
    • 确保服务器的系统时间与实际时间一致,时间差异可能导致签名验证失败。

    示例代码

    以下是一个简单的示例代码,展示如何生成签名:

    const crypto = require('crypto');
    
    function generateSignature(params, secretKey) {
      const sortedKeys = Object.keys(params).sort();
      let signString = '';
      for (let key of sortedKeys) {
        if (params[key] !== '') {
          signString += `&${key}=${encodeURIComponent(params[key])}`;
        }
      }
      signString = `key=${secretKey}${signString}`;
      return crypto.createHash('md5').update(signString).digest('hex').toUpperCase();
    }
    
    // 示例参数
    const params = {
      appid: 'your_appid',
      mch_id: 'your_mchid',
      nonce_str: 'random_string',
      // 其他参数...
    };
    
    const secretKey = 'your_secret_key';
    params.sign = generateSignature(params, secretKey);
    


    2024-09-29
    有用
    回复
登录 后发表内容