收藏
回答

微信支付问题,着实不知道哪里有问题了?

// 商户号,支持「普通商户/特约商户」或「服务商商户」

const MCH_ID = process.env.MCH_ID; 


// 「商户API证书」的「证书序列号」

const CERT_SERIAL_NO = process.env.CERT_SERIAL_NO;


// 从本地文件中加载「商户API私钥」,用于生成请求的签名

const privateKey = fs.readFileSync(path.join(__dirname, './wxpay/apiclient_key.pem'), 'utf8');


// 从本地文件中加载「微信支付平台公钥」,用来验证微信支付应答的签名

const publicKey = fs.readFileSync(path.join(__dirname, './wxpay/publickey.pem'), 'utf8');


// 「微信支付平台公钥」的「平台公钥ID」

// 需要在 商户平台 -> 账户中心 -> API安全 查询

const PUBLIC_KEY = process.env.PUBLIC_KEY;


// 构造一个 APIv3 客户端实例(微信支付公钥模式)

const wxpay = new Wechatpay({

  mchid: MCH_ID,

  serial: CERT_SERIAL_NO,

  privateKey: Rsa.from(privateKey, Rsa.KEY_TYPE_PRIVATE),

  certs: {

    [PUBLIC_KEY]: Rsa.from(publicKey, Rsa.KEY_TYPE_PUBLIC),

  }

});


// 商户注册上传文件

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

  

  try {

    // 获取文件Content

    const fileContent = await getFileContent(event.fileId);


    // 构建请求体

    const media = new Multipart()

      .append('meta', JSON.stringify({

        filename: event.fileName,

        sha256: crypto.createHash("sha256").update(fileContent).digest("hex"),

      }))

      .append('file', fileContent);


    // 上传文件

    const response = await wxpay.v3.merchant.media.upload.post(media);


    return success(response.data?.media_id);

  } catch (error) {

    console.error(error)

    return fail(error.message);

  }

}环境变量目前本地调试都能读取到,但是这个商户图片上传接口一直报错


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

3 个回答

  • 北望沣渭
    北望沣渭
    05-07

    少了第二参数声明请求头上的`Content-type`字段,参考: https://wechatpay.js.org/openapi/v3/merchant/media/upload (已更新)

    wxpay.v3.merchant.media.upload.post(media, { headers: media.getHeaders() })
    


    05-07
    有用
    回复 10
    • 普罗米修斯
      普罗米修斯
      05-07
      方便问一下,我可以从运存上下载使用这个wxpay.v3.merchant.media.upload.post方法上传不
      05-07
      回复
    • 普罗米修斯
      普罗米修斯
      05-07
      我现在加上这个参数之后成400了
      05-07
      回复
    • 普罗米修斯
      普罗米修斯
      05-07
      这个文件是不是没有映射上去
      05-07
      回复
    • 北望沣渭
      北望沣渭
      发表于移动端
      05-07回复普罗米修斯
      看你的代码(不全),貌似是添加的云文件,multipart类默认只支持本地文件的添加,你得先把云文件下载到然后再添加
      05-07
      回复
    • 普罗米修斯
      普罗米修斯
      05-07
      我现在就是用的本地的一个图片进行测试的。
      05-07
      回复
    查看更多(5)
  • Memory
    Memory
    05-07

    05-07
    有用
    回复 5
    • 普罗米修斯
      普罗米修斯
      05-07
      我用的这个wechatpay-axios-plugin,我还没有看出来问题,是因为我这个256生成的方式不对吗,还是说直接从云存储下载的文件不能直接用这个fileContent
      05-07
      回复
    • Memory
      Memory
      05-07回复普罗米修斯
      图片上传仅支持本地路径
      05-07
      回复
    • 普罗米修斯
      普罗米修斯
      05-07
      现在换成本地图片也不行
      05-07
      回复
    • Memory
      Memory
      05-07回复普罗米修斯
      看前面回复
      05-07
      回复
    • 普罗米修斯
      普罗米修斯
      05-07
      好的
      05-07
      回复
  • 普罗米修斯
    普罗米修斯
    05-06

    有没有大佬解答一下


    05-06
    有用
    回复 2
登录 后发表内容