这里我是把微信里的回调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;
}
}