在支付完成后我们会调用回调地址,发送模板消息。具体做法如下;
之前我们有定义过一个回调地址,具体的实现方式是在你支付完成后,他会自动请求执行这个回调文件。
下面我们来写一个上述的回调文件paymentresult.php。
当支付完成后,服务器会自动返回一些支付后的参数给我们,所以我们要使用file_get_contents(“php://input”)方式去获取。
具体如下:
<?php
$post = file_get_contents("php://input");
/**支付成功返回示例 详见 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7**
$post = '<xml>
<appid><![CDATA[wx2421b1c4370ec43b]]></appid>
<attach><![CDATA[支付测试]]></attach>
<bank_type><![CDATA[CFT]]></bank_type>
<fee_type><![CDATA[CNY]]></fee_type>
<is_subscribe><![CDATA[Y]]></is_subscribe>
<mch_id><![CDATA[10000100]]></mch_id>
<nonce_str><![CDATA[5d2b6c2a8db53831f7eda20af46e531c]]></nonce_str>
<openid><![CDATA[oUpF8uMEb4qRXf22hE3X68TekukE]]></openid>
<out_trade_no><![CDATA[1409811653]]></out_trade_no>
<result_code><![CDATA[SUCCESS]]></result_code>
<return_code><![CDATA[SUCCESS]]></return_code>
<sign><![CDATA[B552ED6B279343CB493C5DD0D78AB241]]></sign>
<sub_mch_id><![CDATA[10000100]]></sub_mch_id>
<time_end><![CDATA[20140903131540]]></time_end>
<total_fee>1</total_fee>
<coupon_fee_0><![CDATA[10]]></coupon_fee_0>
<coupon_count><![CDATA[1]]></coupon_count>
<coupon_type><![CDATA[CASH]]></coupon_type>
<coupon_id><![CDATA[10000]]></coupon_id>
<trade_type><![CDATA[JSAPI]]></trade_type>
<transaction_id><![CDATA[1004400740201409030005092168]]></transaction_id>
</xml>';
**支付成功返回示例结束**/
if($post){
file_put_contents('wxpay_log.txt',$post);
$data = getTheEscapedXml($post);
if($data['RETURN_CODE'] == 'SUCCESS'){
//此时返回了正确的数据,可以保存到数据库了
echo 'SUCCESS';//先返回,后保存数据,防止后续逻辑处理过多造成网络超时
$result = json_encode($data);
//保存支付结果信息并且发送模板消息
savePaymentInformation($result);
}
$str='<xml>
<return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
</xml>';
// echo 'SUCCESS';
}else{
file_put_contents('wxpay_log.txt','error,回调错误');
savePaymentErrorInformation();
echo 'ERROR';
echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[Callback error]]></return_msg></xml>';
}
//保存微信支付数据
function savePaymentInformation($result){
$database = require_once '../config/ind_db.php';//引入数据库配置
$db_user = $database['username']; //数据库账号
$db_pass = $database['password']; //数据库密码
//拼接数据库主机信息
$dbh = $database['dsn'];
try {
//开始连接数据库
$dbh = new PDO($dbh,$db_user,$db_pass);
//设置字符集
$dbh -> query('set names utf8');
$time = time();
$sql="INSERT INTO szdato_qyx_wxpay_callback(
pay_info,