Maison > Questions et réponses > le corps du texte
Récemment, je travaille sur l'accès au paiement par code QR de la banque. Après avoir obtenu le document, il y a certaines choses que je ne comprends pas très bien.
1. J'ai téléchargé la clé privée (.sm2) et la clé publique (.cer) du certificat signé et importé directement la clé publique. Je ne sais pas comment utiliser le certificat de clé privée
2. J'utilise la démo PHP, PHP Le code appelle LAJP pour appeler l'environnement JAVA pour la signature. Les données obtenues après la connexion à la démo php ne peuvent pas passer la vérification de la signature du test. Je ne sais pas quelle étape est erronée.
Vous trouverez ci-joint la démo du test sur la page Web : http://wxpay.cmbc.com.cn/. cmbc...< br>Fonction de signature locale fournie :
<?php
require_once("php_java.php");//Citation du script PHP fourni par LAJP
essayer
{
$signAlg = $_REQUEST['signAlg'];
$base64SourceData = $_REQUEST['base64SourceData'];
$base64P12Data = $_REQUEST['base64P12Data'];
$p12Password = $_REQUEST['p12Password'];
$ret = lajp_call("cfca.sadk.api.SignatureKit::P1SignMessage", $signAlg,$base64SourceData, $base64P12Data,$p12Password);
echo "{$ret}<br>";
}
attraper(Exception $e)
{
echo "Err :{$e}<br>" ;
}
?><a href="index.html">retour</a>
黄舟2017-05-16 13:04:18
一、第一个问题,带证书,应该使用curl
/**
* 作用:使用证书,以post方式提交xml到对应的接口url
*/
function postXmlSSLCurl($xml, $url, $second = 30, $wxpay_config) {
$ch = curl_init();
//超时时间
curl_setopt($ch, CURLOPT_TIMEOUT, $second);
//这里设置代理,如果有的话
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
//设置header
curl_setopt($ch, CURLOPT_HEADER, FALSE);
//要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//设置证书
//使用证书:cert 与 key 分别属于两个.pem文件
//默认格式为PEM,可以注释
curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLCERT, $wxpay_config['SSLCERT_PATH']);
//默认格式为PEM,可以注释
curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($ch, CURLOPT_SSLKEY, $wxpay_config['SSLKEY_PATH']);
//post提交方式
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$data = curl_exec($ch);
//返回结果
if ($data) {
curl_close($ch);
return $data;
} else {
$error = curl_errno($ch);
echo "curl出错,错误码:$error" . "<br>";
// echo "<a href='http://curl.haxx.se/libcurl/c/libcurl-errors.html'>错误原因查询</a></br>";
curl_close($ch);
return false;
}
}
二、签名的话
你试着用PHP同样的参数自己生产签名跟java环境比对看看。一般来说应该是不能共用的吧。之前遇到过app里面的微信支付通过php生成的签名给过来app用,这个之前好像是行不通的。