背景
对接企业付款到零钱,微信api请求时需要用到证书(node环境使用pem格式)
微信API:【微信支付】付款开发者文档
已经用微信的\WXCertUtil工具在本地生成了证书文件
问题所在:
证书使用方式错误,原本我是使用:
// 需要证书
agentOptions: {
cert: '../cert.pem',
key:'../key.pem'
},
正确写法:
agentOptions: {
cert: '-----BEGIN CERTIFICATE-----\r\nMIID6TXXXXXXXUNN6Lt1v7o\r\n-----END CERTIFICATE-----',
key:'-----BEGIN PRIVATE KEY-----\r\nMIIEvgIxxxxxxxxxxxxxHZXsjwoJ0gf71bQLrrAMHXh0i73N+KmItDaxTerRhK1XpLehFgTFoPQfmz6pPheHkDvLf9tsOiWZ4uF71+I24G4jHixFDDEyNy4cduzBRJgQTJrBooHLpPDFj2m6uqv\r\n-----END PRIVATE KEY-----',
},
请求中的agentOptions对象 中证书直接使用pem格式的内容即可
注意:用微信工具WXCertUtil 生成的pem格式的文件有换行,node 请求中识别不了,一定要压缩一下,在加入\r\n
压缩工具:CSS代码压缩/解压缩_CSS在线格式化_CSS还原和美化_55查询
以下是相关代码参考:node egg企业付款到微信零钱_今天有坑么的博客-CSDN博客
//helper.js
const Xml2js = require('xml2js')
const Crypto = require('crypto')
const EARTH_RADIUS = 6378.137
module.exports = {
// 计算两坐标点之间的距离 1.
async space(lat1, lng1, lat2, lng2) {
var radLat1 = lat1 * Math.PI / 180.0;
var radLat2 = lat2 * Math.PI / 180.0;
var a = radLat1 - radLat2;
var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378.137;
s = Math.round(s * 10000) / 10000