klover2 / wechatpay-node-v3-ts

微信支付v3
MIT License
528 stars 82 forks source link

商户转零钱 batches_transfer方法 参照使用方法Wechatpay-Serial 报错 #31

Closed ChanJeff123 closed 1 year ago

ChanJeff123 commented 1 year ago

{"status":400,"error":{"code":"PARAM_ERROR","message":"HTTP header缺少微信支付平台证书序列号(Wechatpay-Serial)"}} 参考样例代码格式 报错。

klover2 commented 1 year ago

{"status":400,"error":{"code":"PARAM_ERROR","message":"HTTP header缺少微信支付平台证书序列号(Wechatpay-Serial)"}} 参考样例代码格式 报错。

可以参考下面看是否能够正常获取序列号,如果获取不了,也可以在创建对象的时候,把其他方式获取的序列号写死

serial_no获取

  1. 请在命令窗口使用 openssl x509 -in apiclient_cert.pem -noout -serial 获取
  2. 调用方法getSN() // 不传入参数默认创建对象时的publicKey
    console.log('获取序列号', pay.getSN()); 
    或者
    console.log('获取序列号', pay.getSN(fs.readFileSync('./apiclient_cert.pem'))); 
ChanJeff123 commented 1 year ago

{"status":400,"error":{"code":"PARAM_ERROR","message":"HTTP header缺少微信支付平台证书序列号(Wechatpay-Serial)"}} 参考样例代码格式 报错。

可以参考下面看是否能够正常获取序列号,如果获取不了,也可以在创建对象的时候,把其他方式获取的序列号写死

serial_no获取

  1. 请在命令窗口使用 openssl x509 -in apiclient_cert.pem -noout -serial 获取
  2. 调用方法getSN() // 不传入参数默认创建对象时的publicKey
console.log('获取序列号', pay.getSN()); 
或者
console.log('获取序列号', pay.getSN(fs.readFileSync('./apiclient_cert.pem'))); 

感谢大佬回复,我这边在初始化时加了key 就可以了 const companyPay = new wechatpay({ appid: APP_ID, mchid: APP_MCH_ID, publicKey: fs.readFileSync(Helpers.resourcesPath('pay/apiclient_cert.pem')), // 公钥 privateKey: fs.readFileSync(Helpers.resourcesPath('pay/apiclient_key.pem')), // 秘钥 key: APP_PARTNER_KEY });

let result = await companyPay.batches_transfer(dataBody)
  console.log(result, "result");
woodenfish commented 1 year ago

还是不行,我看代码里,请求的时候没有加上这个Http头 image

klover2 commented 1 year ago

image 你可以先模仿首页demo 测试一下 ,这个有清楚的请求参数

klover2 commented 1 year ago

把请求头中 “serial_no“换成 ”Wechatpay-Serial“,看下是否有效,