PS:对于V2版本微信支付的回调需要在线上环境进行,本文中出现的数据库的相关字段,各位请按照个人需求进行修改,此处只对微信回调数据进行相关解析; 代码方面写的比较杂乱,多看注释,相关代码根据个人需求进行修改;
文章中出现的所有require_once都使用的是绝对路径,按照自身需求进行修改
PHP配置文件:
appConfig.php
<?php
const appid = 'appid';
const mch_id = 'mch_id';
const APIv2 = 'APIv2';
const APIv3 = 'APIv3';
const serial_no = '证书序列号';
const secret = '小程序secret';
上方代码中的相关数据因为个人隐私,此处已经全部隐去,请按照个人需求进行修改
PHP数据库配置文件
database/config.php
<?php
const databaseHost = '127.0.0.1:3306';
const databaseUser = 'root';
const databasePassword = 'root';
const databaseName = 'onlyproject';
PHP处理微信回调数据文件
callBackAction.php
<?php
require_once dirname(__FILE__,3).'/config/appConfig.php';
require_once dirname(__FILE__,3).'/database/connect.php';
$getResult = file_get_contents('php://input'); //接受微信发送的回调通知
$content = $getResult; //将回调的内容赋值给另一个变量
file_put_contents('./getResultData.xml',$content."\n\r",FILE_APPEND); //将回调的内容存入对应的文件中,用于查看数据格式,根据用途可将此段删除
$returnData = file_get_contents('./returnData.xml'); //获取返回给微信的数据
echo $returnData;
$disposeData = simplexml_load_string($content,null,LIBXML_NOCDATA); //解析接受到的xml数据
$json_data = json_encode($disposeData); //将xml数据转换为JSON数据
$array_data = json_decode($json_data,true); //再次将JSON数据转换为数组
$sign = $array_data['sign']; //获取到微信回调数据的签名值
unset($array_data['sign']); //将签名值从数组中剔除
$APIv2 = APIv2; //获取APIv2密钥
$signBody = ''; //遍历数组生成签名数据主体
foreach($array_data as $key => $val){
$signBody .= "$key=$val&";
}
$signBody .= "key=$APIv2";
$signature = strtoupper(MD5($signBody)); //对参与签名的数据进行MD5签名并转化为大写
if($sign == $signature){ //判断生成的签名值与微信回调的签名值是否一致
$return_code = $disposeData -> return_code; //获取返回状态码
$result_code = $disposeData -> result_code; //获取业务结果
$transaction_id = $disposeData -> transaction_id; //获取微信支付订单号
$pay_total_fee = $disposeData -> cash_fee; //获取现金支付金额
$pay_time_data = $disposeData -> time_end; //获取支付时间字符串
$dispose_payTime = date('Y-m-d H:i:s',strtotime($pay_time_data)); //将字符串类型的支付时间转换格式
$out_trade_no = $disposeData -> out_trade_no; //获取商户订单号
if($return_code == 'SUCCESS' && $result_code == 'SUCCESS'){ //判断业务结果
$update = new Connect; //将数据存入数据库中
$sql = 'update order_basic_information set status = 2,transaction_id = "'.$transaction_id.'",pay_total_fee = "'.$pay_total_fee.'",pay_time = "'.$dispose_payTime.'" where out_trade_no = "'.$out_trade_no.'";';
$result = $update -> querySql($sql);
}
}
文章中将微信回调的数据存入了相关文件之中,目的是为了查看返回数据的数据结构,并无其他用途,请各位按照自身需求进行删除或保留
附上微信回调数据格式,xml数据如下:
<xml><appid><![CDATA[小程序appid]]></appid>
<bank_type><![CDATA[OTHERS]]></bank_type>
<cash_fee><![CDATA[1]]></cash_fee>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[N]]></is_subscribe>
<mch_id><![CDATA[商户号mch_id]]></mch_id>
<nonce_str><![CDATA[sKL9o2GDNOdwHmx1YMtgA0vkqa4PiJWc]]></nonce_str>
<openid><![CDATA[小程序微信用户openid]]></openid>
<out_trade_no><![CDATA[2022080416280816596016884608]]></out_trade_no> //注:商户订单号
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[签名值]]></sign>
<time_end><![CDATA[20220804162823]]></time_end> //支付时间
<total_fee>1</total_fee>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[微信支付订单号]]></transaction_id>
</xml>
为了个人隐私考虑,我已将上访部分隐私数据进行隐藏,但对看数据结构无影响
本文由CSDN用户:缱绻淡蓝海 原创,代码具有时效性,作者会不定时进行更新,有任何疑问欢迎私信或者评论
本文介绍如何在PHP中处理微信支付V2版本的回调验证,并将回调数据存入数据库。代码可能较为杂乱,注释详细,需按个人需求调整。回调数据以XML格式返回,数据结构对隐私已做处理。
1082

被折叠的 条评论
为什么被折叠?



