人物略有不同
人物略有不同
  • 发布:42 分钟前
  • 更新:40 分钟前
  • 阅读:11

unipay使用微信支付v3商户向微信用户转账时无可用的平台证书

分类:插件市场

uin-pay版本 "version": "2.4.2",

在用vk框架中,写了一个云函数,主要功能是后台审核通过后, 商户向微信用户转账奖金。

Error: request fail:无可用的平台证书,请在商户平台-API安全申请使用微信支付公钥。

main: async (event) => {  
        let { data = {}, userInfo, util, filterResponse, originalParam } = event;  
        let { customUtil, uniID, config, pubFun, vk, db, _, $ } = util;  
        let { uid } = data;  
        let res = { code: 0, msg: "" };  
        // 业务逻辑开始-----------------------------------------------------------          
        let unipayIns = util.uniPay.initWeixinV3(config['uni-pay'].wxpay.app);   

        let out_bill_no= '2ab07867116d4bf9b692435e1735ea53';  
        let transferRes = await unipayIns.request({    
            method: "POST",    
            // 阿里云空间需要设置为true    
            useEipProxy: true,//false,   
            url: "/v3/fund-app/mch-transfer/transfer-bills",    
            data: {    
                appid: config['uni-pay'].wxpay.app.appId,    
                out_bill_no: out_bill_no,    
                openid:"obuDW64WJIRvagZUtzKDez_Z_mVY",//'user-openid',    
                transfer_amount: 10,//以分为单位  
                transfer_remark: "转账测试",    
                transfer_scene_id: "1000",  
                user_recv_perception: "现金奖励",    
                transfer_scene_report_infos: [{    
                        info_type: "活动名称",    
                        info_content: "新会员有礼"    
                    },    
                    {    
                        info_type: "奖励说明",    
                        info_content: "注册会员抽奖一等奖"    
                    }    
                ]    
            }    
        });  
        // 业务逻辑结束-----------------------------------------------------------  
        return res;  
    }  
}

配置如下:

{  
    "appId": "wx1d0cf7073520ade4",  
    "secret": "36114ea32178230b3df497fbd7a5fd4e",  
    "mchId": "1712229422",  
    "key": "e148f986ed5384717dda57fdf0de11ad",  
    "pfx": Buffer(2774),  
    "v3Key": "e048f986ed5384717dda57fdf1de11ad",  
    "appCertPath": "D:\\project\\wechat-online\\wxClient3\\uni_modules\\uni-config-center\\uniCloud\\cloudfunctions\\common\\uni-config-center\\uni-pay\\wxpay\\apiclient_cert.pem",  
    "appPrivateKeyPath": "D:\\project\\wechat-online\\wxClient3\\uni_modules\\uni-config-center\\uniCloud\\cloudfunctions\\common\\uni-config-center\\uni-pay\\wxpay\\apiclient_key.pem",  
    "wxpayPublicKeyPath": "D:\\project\\wechat-online\\wxClient3\\uni_modules\\uni-config-center\\uniCloud\\cloudfunctions\\common\\uni-config-center\\uni-pay\\wxpay\\pub_key.pem",  
    "wxpayPublicKeyId": "PUB_KEY_ID_0117024494022024122000395111111888",  
    "version": 3  
}
42 分钟前 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

欢迎到专业群( uniCloud 官方技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据知识库中的相关信息,你遇到的"无可用的平台证书"错误是因为微信支付新商户默认使用微信支付公钥模式,不再使用传统的平台证书模式。

解决方案

1. 确认商户平台已开通微信支付公钥

登录微信支付商户平台,在 API安全 中申请开通微信支付公钥功能。新开通的商户号通常默认使用公钥模式,而非平台证书模式。

2. 检查公钥配置参数

你的配置中已经包含了 wxpayPublicKeyPathwxpayPublicKeyId,但需要确保:

  • wxpayPublicKeyId 格式正确:必须以 PUB_KEY_ID_ 开头(如:PUB_KEY_ID_0117024494022024122000395111111888
  • wxpayPublicKeyPath 路径正确:在云函数环境中,建议使用相对路径或读取文件内容

3. 云函数中的路径处理

在云函数环境中,文件路径需要特别注意。建议修改配置为:

const path = require('path');  

// 使用绝对路径或相对路径  
wxpayPublicKeyPath: path.join(__dirname, 'wxpay/pub_key.pem'),  
appCertPath: path.join(__dirname, 'wxpay/apiclient_cert.pem'),  
appPrivateKeyPath: path.join(__dirname, 'wxpay/apiclient_key.pem'),

本助手使用国产模型,生成代码准确率较低。强烈建议使用uni-agent生成代码

确保 pub_key.pem(微信支付公钥证书)已正确上传到 uni-config-center/uni-pay/wxpay/ 目录。

4. 升级 uni-pay 插件

根据 DCloud问答_208874,确保你使用的是支持微信支付公钥的最新版 uni-pay。如果版本较旧,可能不支持公钥模式。

5. 验证证书内容

确保证书文件内容格式正确:

  • 公钥证书内容应包含 -----BEGIN CERTIFICATE----------END CERTIFICATE-----
  • 私钥不应包含 -----BEGIN PRIVATE KEY----- 等标记(如果作为字符串传入)

如果配置后仍然报错,建议检查云函数运行日志,确认证书文件是否被正确加载。也可以参考插件市场 微信商户提现到零钱通uniCloud版 的实现方式,该插件提供了完整的 V3 转账示例代码。

内容为 AI 生成,仅供参考

要回复问题请先登录注册