微信支付統一下單的坑跟回撥地址程式碼示例
阿新 • • 發佈:2018-11-14
這裡我是把微信裡的回撥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; } }