1.检查服务器openssl支持版本与生成pem文件的openssl版本是否一致
2.官方给出PHP的签名类(RSASign)中私钥生成签名时开始与结束标签中没有RSA会返回false,
公钥验证签名时,不需要RSA,注意空格(重要)
3.openssl推荐通过exe文件安装,命令行安装需很多依赖,安装完成后配置环境变量中的系统变量Path至安装目录即可
4.执行以下命令生成公私钥(3个pem文件,可用文本打开)
OpenSSL> genrsa -out rsa_private_key.pem 1024 (私钥,PHP)
OpenSSL> pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt -out rsa_private_key_pkcs8.pem (私钥,JAVA)
OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem (公钥)
OpenSSL> exit (退出)
唤起百度支付(前端),原生需将uni标签改为swan
uni.requestPayment({
provider:'baidu',
orderInfo:result.data,
success:(res)=>{
console.log(res)
},
fail:(res)=>{
console.log(res)
}
})
PHP返回支付信息(后端)
$baiduSign = new RSASign; //官方RSASign类
$signStr = $baiduSign::sign( //私钥字符串不带pem前后缀
['appKey'=>Config::get('appKey'),'dealId'=>Config::get('dealId'),'totalAmount'=>$order_data['total_price'],'tpOrderId'=>$order_data['order_no']],Config::get('rsaPriKeyStr')
);
if(isset($order_data['order_no'])){
return $this->renderSuccess(
['tpOrderId'=>$order_data['order_no'],
'dealTitle'=>$params['title'],
'rsaSign'=>$signStr,
'dealId'=>Config::get('dealId'),
'appKey'=>Config::get('appKey'),
'totalAmount'=>$order_data['total_price'], //这里单位为分,签名参数需一致,否则会签名验证失败
'signFieldsRange'=>'1']
);
} else {
return $this->renderError('统一收单失败');
}