這裏我是把微信裏的回調dome 拿出來重寫了一下, 在配置回調地址的時候,要確定你的回調鏈接地址一定要能夠訪問,
裏面註釋的比較多- -是我自己測試用的 也可以拿來作爲參考,
配合上面一篇我寫的統一下單dome文章作爲 結合來做,
聲明一下:支付的重點在於統一下單,在統一下單是非常容易出錯的地方,各位老鐵一定要仔細檢查,然後斷點多看看,避免一個坑進去就出不來了,我當初就查了好多文檔,
下面是我爲大家找的比較容易出錯的參數,結合上文去做:
$spbill_create_ip = '主機ip';
$total_fee = $fee*100;//因爲充值金額最小是1 而且單位爲分 如果是充值1元所以這裏需要*100
$trade_type = 'NATIVE';//交易類型 默認 這裏按照文檔去改就可以了
$appid ='';//如果是公衆號 就是公衆號的appid
$mch_id ='商戶號';
$wx_key = '';//這是祕鑰,是統一下單簽名的時候用的
我也就做過微信的跟支付寶支付, 都是在統一下單的地方容易出錯,就是我上面列的幾個參數
他們兩個的形式都是基本差不多的,如果微信支付做出來了,支付寶也就自然而然了,pc跟h5 也只是形式上的不同,大同小異而已, 祝各位老鐵早日修成正果~~
附回調代碼:
<?php
namespace Home\Controller;
// use Think\Page;
// use Think\Verify;
//use Think\Cache\Driver\Redis;
class NotifyController extends BaseController {
public function index()
{
$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
// 這句file_put_contents是用來查看服務器返回的XML數據 測試完可以刪除了
// file_put_contents(APP_ROOT.'/log2.txt',$res,FILE_APPEND);
// Log::info('5555555555555555555555555555555555');
// Log::info($xml);
//將服務器返回的XML數據轉化爲數組
$data = $this->xml_to_array($xml);
// $objectxml = simplexml_load_string($xml);//將文件轉換成 對象
// $xmljson= json_encode($objectxml );//將對象轉換個JSON
// $data=json_decode($xmljson,true);//將json轉換成數組
// 保存微信服務器返回的簽名sign
$data_sign = $data['sign'];
// sign不參與簽名算法
unset($data['sign']);
$sign = $this->signs($data);
$result='';
// 判斷簽名是否正確 判斷支付狀態
if ( ($sign===$data_sign) && ($data['return_code']=='SUCCESS') && ($data['result_code']=='SUCCESS') ) {
$result = $data;
//獲取服務器返回的數據
// $result爲返回的數組,這裏進行業務邏輯處理~
}else{
$str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[簽名失敗]]></return_msg></xml>';
}
// 返回狀態給微信服務器
if ($result) {
$str='<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
}else{
$str='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[簽名失敗]]></return_msg></xml>';
}
// echo $str;
// Log::info($str);
// Log::record($str);
return $str;
}
/*
*簽名算法
*/
private function signs($data){
ksort($data);
$stringA = '';
foreach ($data as $key=>$value){
if(!$value) continue;
if($stringA) $stringA .= '&'.$key."=".$value;
else $stringA = $key."=".$value;
}
$wx_key = '************************';//申請支付後有給予一個商戶賬號和密碼,登陸後自己設置key
$stringSignTemp = $stringA.'&key='.$wx_key;//申請支付後有給予一個商戶賬號和密碼,登陸後自己設置key
return strtoupper(md5($stringSignTemp));
}
/*
*格式轉數據
*/
public function xml_to_array($xml){
if(!$xml){
return false;
}
//將XML轉爲array
//禁止引用外部xml實體
libxml_disable_entity_loader(true);
$data = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $data;
}
}