鍍金池/ 問(wèn)答/PHP  C  HTML/ 微信 企業(yè)付款到個(gè)人api 簽名問(wèn)題

微信 企業(yè)付款到個(gè)人api 簽名問(wèn)題

參考文檔
https://pay.weixin.qq.com/wik...
目前做到
這一步出問(wèn)題clipboard.png

我按照官方給的步奏

clipboard.png
這個(gè)是我的生成簽名的代碼實(shí)現(xiàn)

$dataArr=array();
$dataArr['appid']=APPID;
$dataArr['mch_id']=$mch_id;
$dataArr['device_info']='1000';
$dataArr['body']='test';
$dataArr['nonce_str']=$nonce_str;
$sign=getSign($dataArr);//簽名


function getSign($dataArr)
{
foreach ($dataArr as $k => $v)
{
$Parameters[$k] = $v;
}
//簽名步驟一:按字典序排序參數(shù)
ksort($Parameters);
$String = formatBizQueryParaMap($Parameters, false);//方法如下
//echo '【string1】'.$String.'</br>';
//簽名步驟二:在string后加入KEY
$String = $String."&key=XXXXXXX";
//echo "【string2】".$String."</br>";
//簽名步驟三:MD5加密
$String = md5($String);
//echo "【string3】 ".$String."</br>";
//簽名步驟四:所有字符轉(zhuǎn)為大寫
$result_ = strtoupper($String);
//echo "【result】 ".$result_."</br>";
return $result_;
}

然后在線簽名驗(yàn)證 結(jié)果一致
clipboard.png
但是到了RSA加密這一步
返回的xml卻是

<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[SIGN_ERR]]></return_msg>
<err_code><![CDATA[PARAM_ERROR]]></err_code>
<err_code_desc><![CDATA[PARAM_ERR: SIGN_TYPE_INVALID]]></err_code_desc>
</xml>

簽名出錯(cuò)。。。
curl請(qǐng)求的函數(shù)是

function RAS($mch_id,$nonce_str,$sign){
$data="<xml>
<mch_id>".$mch_id."</mch_id>
<nonce_str>".$nonce_str."</nonce_str>
<sign>".$sign."</sign>
</xml>";\
$url="https://fraud.mch.weixin.qq.com/risk/getpublickey";
$ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    curl_setopt($ch,CURLOPT_SSLCERT,'./WxpayAPI_php/cert/apiclient_cert.pem');
    curl_setopt($ch,CURLOPT_SSLKEY,'./WxpayAPI_php/cert/apiclient_key.pem');
    curl_setopt($ch,CURLOPT_CAINFO,'./WxpayAPI_php/cert/rootca.pem'); 
    $content=curl_exec($ch);
    curl_close ( $ch );
echo $content
}

不知道哪里出錯(cuò)了.....
回答
編輯回答
寫榮

給你看看我這邊可以成功調(diào)用帶證書接口的部分代碼吧。
首先請(qǐng)求參數(shù)確定好之后用這些參數(shù)去獲取簽名,然后再把簽名放到請(qǐng)求參數(shù)里。
圖片描述
獲取簽名需過(guò)濾掉空值的參數(shù)。
圖片描述

2017年3月27日 15:12