suchen

Heim  >  Fragen und Antworten  >  Hauptteil

php - 银行二维码支付接入问题

最近在做银行的二维码支付接入,拿到文档后有几个地方不是很理解。
1.下载了签名的证书私钥(.sm2)、公钥(.cer)公钥直接导入,私钥证书不知道该怎么使用
2.由于使用的是php的demo,PHP代码通过调用LAJP来调取了JAVA环境进行签名。在php demo中签名后得到的数据不能通过测试的验签,不知道是哪一步除了错
附上网页端的测试demo:http://wxpay.cmbc.com.cn/cmbc...
提供的本地签名函数:
<?php

require_once("php_java.php");//引用LAJP提供的PHP脚本
   try
    {
       $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>";
    }
catch(Exception $e)
{
  echo "Err:{$e}<br>";
}
?><a href="index.html">return</a>
世界只因有你世界只因有你2757 Tage vor909

Antworte allen(1)Ich werde antworten

  • 黄舟

    黄舟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用,这个之前好像是行不通的。

    Antwort
    0
  • StornierenAntwort