HarmonyOS 鸿蒙Next中微信支付验证签名失败
HarmonyOS 鸿蒙Next中微信支付验证签名失败 请教下我一直微信支付验证签名失败,有遇到过吗?我是用的调试证书,微信登录没有问题,但是支付一直验证失败,支付的签名我是在APP签名的。
我尝试换了好几个md5加密的方法,但是生成的加密字符串都是一样,感觉跟md5加密应该没有什么区别。md5同步异步都方法都试过
不知道是哪里有问题,安卓是可以支付的。
public async pay(params: WXPayParams): Promise<boolean | null> {
if (!this.wxApi?.isWXAppInstalled()) {
return Promise.resolve(null)
}
return new Promise((resolve) => {
this.payResolver = resolve
const req = new wxopensdk.PayReq();
req.partnerId = params.partnerid
req.appId = params.appid
req.packageValue = params.package
req.prepayId = params.prepayid
req.nonceStr = params.noncestr
req.timeStamp = params.timestamp
let parameters: Map<string, string> = new Map();
parameters.set("appid", req.appId);
parameters.set("noncestr", req.nonceStr);
parameters.set("package", req.packageValue);
parameters.set("partnerid", req.partnerId);
parameters.set("prepayid", req.prepayId);
parameters.set("timestamp", req.timeStamp);
let pStr = this.createSignFromMaps(parameters)
let test1111 = CryptoJS.MD5(pStr).toString().toUpperCase()
req.sign = test1111
this.handler.registerOnRespCallback(this._onResp.bind(this))
this.wxApi?.sendReq(getContext(this) as common.UIAbilityContext, req)
})
}
static async createSignFromMap(parameters: Map<string, string>): Promise<string> {
const keys = Array.from(parameters.keys())
.filter(k => k !== 'sign' && k !== 'key' && parameters.get(k) !== null && parameters.get(k) !== '')
.sort();
// 2. 拼接参数
let sb = '';
for (const k of keys) {
sb += `${k}=${parameters.get(k)}&`;
}
// 3. 拼接商户秘钥
sb += `key=${app_key}`;
sb = sb.trim().replace(/\u200B/g,''); // 去零宽空格
// 4. 打印调试
let sign =await HashUtil.md5(sb)
return sign.toUpperCase();
}
createSignFromMaps(parameters: Map<string, string>): string{
const keys = Array.from(parameters.keys())
.filter(k => k !== 'sign' && k !== 'key' && parameters.get(k) !== null && parameters.get(k) !== '')
.sort();
// 2. 拼接参数
let sb = '';
for (const k of keys) {
sb += `${k}=${parameters.get(k)}&`;
}
// 3. 拼接商户秘钥
sb += `key=${app_key}`;
sb = sb.trim().replace(/\u200B/g,''); // 去零宽空格
// 4. 打印调试
return sb
}
更多关于HarmonyOS 鸿蒙Next中微信支付验证签名失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
2 回复
签名验证失败通常由参数拼接或密钥处理导致。检查以下几点:
- 确认
app_key
是否正确配置,与微信商户平台一致 - 参数拼接顺序需按ASCII码排序,代码中已使用
sort()
,但需确保所有参数(包括package
)参与签名 - 注意
packageValue
字段在微信支付中实际为package
,但签名时需使用原始参数名 “package” - 调试时输出
sb
字符串,与微信官方文档的示例对比,确保拼接格式一致 - 检查是否有特殊字符或空格处理,代码中已去除零宽空格,但需验证其他不可见字符
若安卓正常而鸿蒙失败,重点排查环境差异,如密钥存储或字符编码处理。