Closed hexlul closed 1 year ago
大佬好, 使用敏感信息加密,出现平台证书序列号Wechatpay-Serial错误,按照#31的方法增加key没有用,我看到2.0.2增加敏感信息加密方法后,
'serial_no="' + this.serial_no + '",' + 替换了 'Wechatpay-Serial="' + this.serial_no + '",' +
https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay7_2.shtml 这个错误出现在上送参数需要敏感信息加密的接口中。请参考申明加密使用的平台证书 当证书序列号错误或者不是请求商户号对应的平台证书时,微信支付会返回问题中的错误提示。请检查: 加密使用的证书是否是微信支付平台证书。有时会误用商户证书导致该错误。 是否是请求商户对应的微信支付平台证书,如用了其他商户号的平台证书。 证书是否过期。请按照指引检查证书是否过期,并更新并部署新证书。
请问是不是要把Wechatpay-Serial加回去?
不好意思 是我用错证书了 请更新npm 2.0.4,请试试是否正常, 谢谢 参考文档:
感谢及时修复!使用最新版后,出现了如下错误,这个key是APIV3密钥吗?我在pay中加上了 key,但是没效果,key使用的是明文,非加密。
RangeError: Invalid key length
at Decipheriv.createCipherBase (node:internal/crypto/cipher:116:19)
at Decipheriv.createCipherWithIV (node:internal/crypto/cipher:135:3)
at new Decipheriv (node:internal/crypto/cipher:289:3)
at Object.createDecipheriv (node:crypto:146:10)
at Pay.decipher_gcm (C:\wechatproject\miniprogram\cloudfunctions\Pay\node_modules\wechatpay-node-v3\dist\index.js:328:41)
at Pay.
不好意思,const certificates = await pay.get_certificates("APIv3密钥"),我忘了修改这里的APIv3密钥,平台证书已经获取到了。
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({
out_batch_no: 'plfk2020042013',
batch_name: '2019年1月深圳分部报销单',
batch_remark: '2019年1月深圳分部报销单',
total_amount: 4000000,
total_num: 200,
wx_serial_no: certificate.serial_no,
transfer_detail_list: [
{
out_detail_no: 'x23zy545Bd5436',
transfer_amount: 200000,
transfer_remark: '2020年4月报销',
openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
出现这个错误,所有接口已经调通了 wx_serial_no: certificate.serial_no 这个参数是我特意加了 用于放在Wechatpay-Serial中的参数,你现在报错是你out_batch_no或者out_detail_no参数有问题 不要用我的示例代码,请随便更改一个随机字符串
请看源码 应该会解决你的疑惑
/**
* 发起商家转账零钱
* @documentation 请看文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml
*/
public async batches_transfer(params: BatchesTransfer.Input): Promise<BatchesTransfer.IOutput> {
const url = 'https://api.mch.weixin.qq.com/v3/transfer/batches';
// 请求参数
const _params = Object.assign({
appid: this.appid,
...params,
});
const serial_no = _params.wx_serial_no;
delete _params.wx_serial_no;
const authorization = this.init('POST', url, _params);
return await this.postRequestV2(url, _params, authorization, { 'Wechatpay-Serial': serial_no });
}
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
还有需要确保这个参数是你获取的 不能乱写
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
谢谢,我再仔细检查代码看看。 openid获取应该没问题,姓名字段没有的情况下,测试过是成功的。为了增加安全,才添加了姓名字段校验,产生了需要上传敏感信息和平台证书的问题。之前测试某一笔的姓名字段如果为空,也会提示“姓名字段规则不一致”错误,导致整个批次转账失败。我觉得如果openid或姓名字段出问题,应该转账批次能提交成功,在转账明细那边显示失败。 看你发的图片,突然注意到user_name 有长度限制, string[2,30],最低要1个汉字才行。我也使用了非空的名字。
如果user_name长度限制32字符的话,加密生成的明显超长度了, 以下是我加密后获取的加密串 "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" 是不是这个原因呢?
如果user_name长度限制32字符的话,加密生成的明显超长度了, 以下是我加密后获取的加密串 "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" 是不是这个原因呢?
不是的 微信拿到这个数据是会解密的 是解密后的长度吧
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试"
batch_remark: "内部人员测试"
out_batch_no: "KYFK2022101011090932"
total_amount: 200
total_num: 3
transfer_detail_list: Array(3)
0:
openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI"
out_detail_no: "KYFK20221010110909320001"
transfer_amount: 45
transfer_remark: "测试"
user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ=="
[[Prototype]]: Object
1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55}
2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="}
length: 3
[[Prototype]]: Array(0)
wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
[[Prototype]]: Object
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
出现这个错误,所有接口已经调通了 wx_serial_no: certificate.serial_no 这个参数是我特意加了 用于放在Wechatpay-Serial中的参数,你现在报错是你out_batch_no或者out_detail_no参数有问题 不要用我的示例代码,请随便更改一个随机字符串
请看源码 应该会解决你的疑惑
/** * 发起商家转账零钱 * @documentation 请看文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml */ public async batches_transfer(params: BatchesTransfer.Input): Promise<BatchesTransfer.IOutput> { const url = 'https://api.mch.weixin.qq.com/v3/transfer/batches'; // 请求参数 const _params = Object.assign({ appid: this.appid, ...params, }); const serial_no = _params.wx_serial_no; delete _params.wx_serial_no; const authorization = this.init('POST', url, _params); return await this.postRequestV2(url, _params, authorization, { 'Wechatpay-Serial': serial_no }); }
请问用了const,再用delete删除其中的数据,有没有删除成功呢?
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
出现这个错误,所有接口已经调通了 wx_serial_no: certificate.serial_no 这个参数是我特意加了 用于放在Wechatpay-Serial中的参数,你现在报错是你out_batch_no或者out_detail_no参数有问题 不要用我的示例代码,请随便更改一个随机字符串 请看源码 应该会解决你的疑惑
/** * 发起商家转账零钱 * @documentation 请看文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml */ public async batches_transfer(params: BatchesTransfer.Input): Promise<BatchesTransfer.IOutput> { const url = 'https://api.mch.weixin.qq.com/v3/transfer/batches'; // 请求参数 const _params = Object.assign({ appid: this.appid, ...params, }); const serial_no = _params.wx_serial_no; delete _params.wx_serial_no; const authorization = this.init('POST', url, _params); return await this.postRequestV2(url, _params, authorization, { 'Wechatpay-Serial': serial_no }); }
请问用了const,再用delete删除其中的数据,有没有删除成功呢?
是能删除的
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
出现这个错误,所有接口已经调通了 wx_serial_no: certificate.serial_no 这个参数是我特意加了 用于放在Wechatpay-Serial中的参数,你现在报错是你out_batch_no或者out_detail_no参数有问题 不要用我的示例代码,请随便更改一个随机字符串 请看源码 应该会解决你的疑惑
/** * 发起商家转账零钱 * @documentation 请看文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml */ public async batches_transfer(params: BatchesTransfer.Input): Promise<BatchesTransfer.IOutput> { const url = 'https://api.mch.weixin.qq.com/v3/transfer/batches'; // 请求参数 const _params = Object.assign({ appid: this.appid, ...params, }); const serial_no = _params.wx_serial_no; delete _params.wx_serial_no; const authorization = this.init('POST', url, _params); return await this.postRequestV2(url, _params, authorization, { 'Wechatpay-Serial': serial_no }); }
请问用了const,再用delete删除其中的数据,有没有删除成功呢?
是能删除的
用于签名的参数是不包括wx_serial_no的 '{"appid":"wxd678efh567hg6787","out_batch_no":"plfk2020042013","batch_name":"2019年1月深圳分部报销单","batch_remark":"2019年1月深圳分部报销单","total_amount":4000000,"total_num":200,"transfer_detail_list":[{"out_detail_no":"x23zy545Bd5436","transfer_amount":200000,"transfer_remark":"2020年4月报销","openid":"o-MYE42l80oelYMDE34nYD456Xoy","user_name":"CDAciTdVtgJzj+gsFIQql8ka4iaje6cikFpa72lT0Hwdw69gSQsnayKH7TwAfIU/80WaXd4G+fVDdf7k7wfY9CaCESiCcVeSkYRX4L3suVwTeohsbCG7vu/zd2gzzmaXla6cIBmA+A5OpMGyDJhvVqp3EzbQInKjAkzqxRNvewkgx7cYfNKIWp7dXY/tZsdef8BSL9xgibBiVASRVYZLa1Hoi895p2RHACCf/vVmNfA0TFbuBXMNw5a5S2WmLMboMbs639FFHZObpLWfnEyIWbUV6RaPfBM38w7/usYCL2Arvkve+mfkw11jP1PDYk+fruP4DytfR6gGdzhujvXKGw=="}]}'
在最终提交数据的时候显示,“转账批次参数不正确”
const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy',
wx_serial_no: certificate.serial_no 并不在官方的参数列表中,证书序列号包含在请求HTTP头部的Wechatpay-Serial中就可以了吧。去掉wx_serial_no后,就会提示pay中有未定义的参数,麻烦大佬再修复一下,谢谢!!
出现这个错误,所有接口已经调通了 wx_serial_no: certificate.serial_no 这个参数是我特意加了 用于放在Wechatpay-Serial中的参数,你现在报错是你out_batch_no或者out_detail_no参数有问题 不要用我的示例代码,请随便更改一个随机字符串 请看源码 应该会解决你的疑惑
/** * 发起商家转账零钱 * @documentation 请看文档https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml */ public async batches_transfer(params: BatchesTransfer.Input): Promise<BatchesTransfer.IOutput> { const url = 'https://api.mch.weixin.qq.com/v3/transfer/batches'; // 请求参数 const _params = Object.assign({ appid: this.appid, ...params, }); const serial_no = _params.wx_serial_no; delete _params.wx_serial_no; const authorization = this.init('POST', url, _params); return await this.postRequestV2(url, _params, authorization, { 'Wechatpay-Serial': serial_no }); }
请问用了const,再用delete删除其中的数据,有没有删除成功呢?
是能删除的
用于签名的参数是不包括wx_serial_no的 '{"appid":"wxd678efh567hg6787","out_batch_no":"plfk2020042013","batch_name":"2019年1月深圳分部报销单","batch_remark":"2019年1月深圳分部报销单","total_amount":4000000,"total_num":200,"transfer_detail_list":[{"out_detail_no":"x23zy545Bd5436","transfer_amount":200000,"transfer_remark":"2020年4月报销","openid":"o-MYE42l80oelYMDE34nYD456Xoy","user_name":"CDAciTdVtgJzj+gsFIQql8ka4iaje6cikFpa72lT0Hwdw69gSQsnayKH7TwAfIU/80WaXd4G+fVDdf7k7wfY9CaCESiCcVeSkYRX4L3suVwTeohsbCG7vu/zd2gzzmaXla6cIBmA+A5OpMGyDJhvVqp3EzbQInKjAkzqxRNvewkgx7cYfNKIWp7dXY/tZsdef8BSL9xgibBiVASRVYZLa1Hoi895p2RHACCf/vVmNfA0TFbuBXMNw5a5S2WmLMboMbs639FFHZObpLWfnEyIWbUV6RaPfBM38w7/usYCL2Arvkve+mfkw11jP1PDYk+fruP4DytfR6gGdzhujvXKGw=="}]}'
您好,你可以直接拉下源码直接调试,看下问题出现在那里,我这边没有发现问题
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,(url, _params, authorization, { 'Wechatpay-Serial': serial_no }), wx_serial_no的确是删除了,_params值和官方要求的参数一样。
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。感觉加密后的长度比示例值长太多了。
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error:
code: "PARAM_ERROR"
message: "转账批次参数不正确"
[[Prototype]]: Object
status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error: code: "PARAM_ERROR" message: "转账批次参数不正确" [[Prototype]]: Object status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
你看下这个是否对你有用 文档链接https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter4_3_2.shtml
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error: code: "PARAM_ERROR" message: "转账批次参数不正确" [[Prototype]]: Object status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
实在不行,user_name签名出来的数据把后面的==删掉,或者随便输入一个小于30位的字符串,看看错误是不是不一样
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error: code: "PARAM_ERROR" message: "转账批次参数不正确" [[Prototype]]: Object status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
你看下这个是否对你有用 文档链接https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter4_3_2.shtml
谢谢,这个已经设置过了,如果不设置的话,会提示IP地址错误 。云开发的ip只能不断试错查日志添加IP。目前,不带名字测试就没问题。
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error: code: "PARAM_ERROR" message: "转账批次参数不正确" [[Prototype]]: Object status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
实在不行,user_name签名出来的数据把后面的==删掉,或者随便输入一个小于30位的字符串,看看错误是不是不一样
user_name截取部分加密字符,显示“请确认待处理的消息是否为加密后的密文”,这和姓名未加密时是一样的错误提示。
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error: code: "PARAM_ERROR" message: "转账批次参数不正确" [[Prototype]]: Object status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
实在不行,user_name签名出来的数据把后面的==删掉,或者随便输入一个小于30位的字符串,看看错误是不是不一样
user_name截取部分加密字符,显示“请确认待处理的消息是否为加密后的密文”,这和姓名未加密时是一样的错误提示。
这说明签名是没有问题的
那真没感觉哪里有问题呢,除了参数多了一个wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1"
batch_name: "内部测试" batch_remark: "内部人员测试" out_batch_no: "KYFK2022101011090932" total_amount: 200 total_num: 3 transfer_detail_list: Array(3) 0: openid: "oY6iu5KiZYh3FctT4xl5Fa04_fKI" out_detail_no: "KYFK20221010110909320001" transfer_amount: 45 transfer_remark: "测试" user_name: "r852o2T2C58reVaSVUkAA5zMXWKvuBRb3EZr65u297wvy+/OZkMLFB1xhaEfq/EbWDaxxklmcwEeMO1kIbgHrKYaNSGXvcZku4sYFW1nRWDTmGgQlgdURjRGjZrwlTx4MbNiy/TLu/3ZGDIxz+Pj0MXs/w9MXg0+U9eZkqkt81omdgdpVdin1pxUsJ7muCmx814k0o0QcIArKcREJH39oWj+dvqkaI33To7laGohllhvCaG/0aeGli9MFUQK/7iNGCyh0UMtM2NsfqoAoe0twFi6RbP7m2lKVnSWjAm9mwfBGAdalLKjBWJBOL0+VXrPFDRLyur2wJwHAqfhHa0AfQ==" [[Prototype]]: Object 1: {out_detail_no: "KYFK20221010110909320002", openid: "oY6iu5A2Ok6xZhlt6PXACE0aRwEc", transfer_remark: "测试", user_name: "Bz6t9cUmg2JLcXidMjrFzOZjCZQ/VCIQZHoJ2awdQxkDSNjt7b…2Fh9/L6XaGklQ0WBHlpsLvFROhFplJNXcAyZQAKoBmIL6ig==", transfer_amount: 55} 2: {transfer_amount: 100, out_detail_no: "KYFK20221010110909320003", openid: "oY6iu5JLetKDKsG2Fi1WxJ13GFuc", transfer_remark: "测试", user_name: "P2MI8ZoKiJcaec159YjV1aLkohRj5MxKxMwv/h5vMyKNqu9K7f…eNZn6wViAwfEwxHdJILLhKzD/ESsTMTeC+I/b/QcMI6oLLw=="} length: 3 [[Prototype]]: Array(0) wx_serial_no: "5DB3080701A265A4D838B4F9F7DD2C8C948704E1" [[Prototype]]: Object
你可以断点调试一下,wx_serial_no这个参数在请求参数中已经移除了,放在请求头里了
断点测试了一下,wx_serial_no的确是删除了,_params值和官方要求的参数一样。
你好,你这微信user_name是从微信当前appid 下获取到的用户信息中的名称吗
不是的,是直接使用的真实姓名然后加密的,这个名字我打算让用户自己输入保存在数据库中的。
你最好看下这几笔订单的用户名字在微信中user_name是什么,你虽然输入的是真实名称,但是微信里面没有,他们就校验不了,我在2.0.6版本里面把wx_serial_no 这个字段改成了可选,你可以先不填用户名称,过渡一下,确认好名称之后,再传用户名称试试
我可以确定测试的几笔,都实名认证过的,这个名字微信肯定会有吧。 回头我也试试通过openid获取微信里的名字对比一下看看。 非常感谢!
能不能把你请求返回的详细报错信息发我看一下,谢谢
没有详细报错,就是简单的400错误,太宽泛了 - -! 感觉已经进行到最后一步了,完全没有头绪了。
error: code: "PARAM_ERROR" message: "转账批次参数不正确" [[Prototype]]: Object status: 400
如果user_name有问题,它应该报400 中的INVALID_REQUEST错误,请求参数符合参数格式,但不符合业务规则。
实在不行,user_name签名出来的数据把后面的==删掉,或者随便输入一个小于30位的字符串,看看错误是不是不一样
user_name截取部分加密字符,显示“请确认待处理的消息是否为加密后的密文”,这和姓名未加密时是一样的错误提示。
这说明签名是没有问题的
是的,不加名字直接就付款成功。暂时只能先不加名字替代了,这个上传敏感信息加密要求太多了。
大佬好,需求超过2000后要实名,于是再次测试实名,以上代码未做任何更改的情况下,几个月后测试竟然又成功了!
大佬好,需求超过2000后要实名,于是再次测试实名,以上代码未做任何更改的情况下,几个月后测试竟然又成功了!
谢谢,能看看你具体怎样使用的吗
大佬好,需求超过2000后要实名,于是再次测试实名,以上代码未做任何更改的情况下,几个月后测试竟然又成功了!
谢谢,能看看你具体怎样使用的吗
不好意思,经常打不开这网页。刚看到回复。 我是严格按照 const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, // 当你需要传user_name时 需要传当前参数 transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy', user_name: pay.publicEncrypt('张三', Buffer.from(certificate.publicKey)), } ], }); 这个列表设置的参数。user_name之前提示参数错误我就注释掉了没用,时隔几月再试又可以了。我也是一脸懵的。。。 不知道什么原因导致的。说明之前的签名、参数列表应该没问题。
大佬好,需求超过2000后要实名,于是再次测试实名,以上代码未做任何更改的情况下,几个月后测试竟然又成功了!
谢谢,能看看你具体怎样使用的吗
不好意思,经常打不开这网页。刚看到回复。 我是严格按照 const res = await pay.batches_transfer({ out_batch_no: 'plfk2020042013', batch_name: '2019年1月深圳分部报销单', batch_remark: '2019年1月深圳分部报销单', total_amount: 4000000, total_num: 200, wx_serial_no: certificate.serial_no, // 当你需要传user_name时 需要传当前参数 transfer_detail_list: [ { out_detail_no: 'x23zy545Bd5436', transfer_amount: 200000, transfer_remark: '2020年4月报销', openid: 'o-MYE42l80oelYMDE34nYD456Xoy', user_name: pay.publicEncrypt('张三', Buffer.from(certificate.publicKey)), } ], }); 这个列表设置的参数。user_name之前提示参数错误我就注释掉了没用,时隔几月再试又可以了。我也是一脸懵的。。。 不知道什么原因导致的。说明之前的签名、参数列表应该没问题。
谢谢
大佬好, 使用敏感信息加密,出现平台证书序列号Wechatpay-Serial错误,按照#31的方法增加key没有用,我看到2.0.2增加敏感信息加密方法后,
https://pay.weixin.qq.com/wiki/doc/apiv3_partner/wechatpay/wechatpay7_2.shtml 这个错误出现在上送参数需要敏感信息加密的接口中。请参考申明加密使用的平台证书 当证书序列号错误或者不是请求商户号对应的平台证书时,微信支付会返回问题中的错误提示。请检查: 加密使用的证书是否是微信支付平台证书。有时会误用商户证书导致该错误。 是否是请求商户对应的微信支付平台证书,如用了其他商户号的平台证书。 证书是否过期。请按照指引检查证书是否过期,并更新并部署新证书。
请问是不是要把Wechatpay-Serial加回去?