PHP微信支付获取回调数据

微信支付获取回调数据

微信回调接口比较麻烦一点就是不方便测试

微信支付回调函数都是使用以下变量获取POST数据:

php配置中,必须启用 always_populate_raw_post_data

//php.ini 配置

always_populate_raw_post_data = On

不过一般都是开启的,所以暂时不用管它。

由于之前的项目PHP版本为:php<7.0,所以使用 $GLOBALS['HTTP_RAW_POST_DATA'] 还是OK的;

项目PHP版本升级到7.0之后的版本,微信支付回调使用上面的方法 ,获取不到数据

解决的方法也很简单,只要使用php://input来代替就行。

比如

$data = $GLOBALS['HTTP_RAW_POST_DATA'];

改为

$data = file_get_contents('php://input');

特别提醒
如果你的微信支付,小程序支付,app支付中,
以前使用HTTP_RAW_POST_DATA来获取微信支付异步处理结果的,
升级到php7后,
一定要记得按照上面的方法改过来,

否则有些功能使用不了。

原因是PHP 7版本中已经移除了这个全局变量:'HTTP_RAW_POST_DATA',用 php://input 替代,使用 always_populate_raw_post_data 会导致在填充 $HTTP_RAW_POST_DATA 时产生 E_DEPRECATED 错误。

亲测

方法完整代码:

public function callback(){
    // $xml = $GLOBALS['HTTP_RAW_POST_DATA'];
    $xml = file_get_contents("php://input"); //7.0以上
    $arr = xmlToArray($xml);
 
 
    if($arr['return_code']=='SUCCESS'){ //到这里说明已经付款成功了
     
        //修改订单状态
        OrderModel::where('no', $arr['out_trade_no']) ->update(['status' => 2]);
 
         
        //告诉微信,我已经处理了,否则微信那边会重复发送数据过来的哦
        $mes=array(
            'return_code'=>'SUCCESS',
            'return_msg'=>'OK'
        );
        return xml($mes);
    }
 
 
}

回调返回的数据:

[appid] => wx0debacb93cb90fe5
[bank_type] => CFT
[cash_fee] => 1
[fee_type] => CNY
[is_subscribe] => N
[mch_id] => 1238270202
[nonce_str] => 44wugpcoqff9guhpp30e60rok50eb0td
[openid] => ozUTy0PeBNzlPx2cTIjq40T6kUVA
[out_trade_no] => 2017091311090393
[result_code] => SUCCESS
[return_code] => SUCCESS
[sign] => 9C1F65C03B475017864261ADCD2D750D
[time_end] => 20170913110908
[total_fee] => 1
[trade_type] => JSAPI
[transaction_id] => 4000542001201709131822508410

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个用PHP编写微信支付的示例代码: ```php <?php // 引入微信支付SDK require_once "WxPay.Api.php"; require_once "WxPay.Notify.php"; // 配置你的微信支付参数 $appId = 'your_app_id'; // 微信公众号App ID $mchId = 'your_mch_id'; // 微信支付商户号 $key = 'your_key'; // 微信支付API密钥 // 设置微信支付配置 $config = new WxPayConfig(); $config->SetAppId($appId); $config->SetMerchantId($mchId); $config->SetKey($key); // 获取微信支付回调通知数据 $xml = file_get_contents('php://input'); $data = WxPayResults::Init($config, $xml); // 验证支付结果 if ($data['return_code'] == 'SUCCESS') { // 支付成功处理逻辑 // 可以根据业务需求进行订单状态更新、发货等操作 // 返回成功通知给微信服务器 $notify = new PayNotifyCallBack(); $notify->Handle(true); } else { // 支付失败处理逻辑 // 可以根据业务需求进行订单状态更新、退款等操作 // 返回失败通知给微信服务器 $notify = new PayNotifyCallBack(); $notify->Handle(false); } class PayNotifyCallBack extends WxPayNotify { // 处理支付回调通知 public function NotifyProcess($data, &$msg) { // TODO: 处理支付回调通知的业务逻辑 // 可以根据业务需求进行订单状态更新、发货等操作 return true; } } ``` 请注意,上述示例代码中的`your_app_id`、`your_mch_id`和`your_key`需要替换为你自己的微信支付相关信息。另外,你可能还需要根据实际业务需求在`NotifyProcess`方法中添加具体的业务逻辑处理代码。此外,确保已经引入了微信支付的SDK文件(`WxPay.Api.php`和`WxPay.Notify.php`)并正确配置了相关文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PHP柚子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值