PHP微信支付开发(3)-订单查询

该博客详细介绍了在ThinkPHP6或5.1环境下,如何实现微信支付的订单查询接口。通过接收客户端传来的业务订单id,查询订单状态,并构造请求微信支付接口的参数进行订单状态更新。如果订单已支付或退款成功,接口会更新订单状态并保存交易号。
摘要由CSDN通过智能技术生成

一、概述

本系列博客将讨论基于微信支付的项目开发中,涉及到的下单与支付、退款、以及订单查询的后端代码实现。在本系列博客中,将以代码片段作为示例,来讨论ThinkPHP 后端接口实现的过程。

在本系列的接口示例中,返回的状态码标识如下:

0: 业务成功
-1: 业务失败

开发环境如果:

  • ThinkPHP 6 或者 ThinkPHP 5 / 5.1
  • PHP 7 运行环境

本文是第三篇,我们先讨论订单查询。

订单查询接口是用于查询订单状态的,当用户支付成功之后,或者退款成功之后,微信服务器可能没有及时完成通知(这种概率很小)。我们可以设置订单查询接口给前段调用来更新业务的订单状态,及时完成订单状态的更新。

二、请求查询接口

//根据客户端传过来的业务订单id,获取到业务订单对象
$order = Orders::where('id',request()->params('id'))->find();
if (!$order) {
    return json(['code':-1,'msg':'订单不存在']);
}
//构造请求微信接口的参数
$params = [
    'appid' => config('wx.app_id'),// APP ID
    'mch_id' => config('wx.mch_id'),// 商户号
    'out_trade_no' => $order['out_trade_no'],
    'nonce_str' => md5(time()),
    'sign_type' => 'MD5',
];
//构造xml
$xml = '<?xml version="1.0" encoding="utf-8"?>';
$xml .= '<xml>';
$stringA = '';
ksort($params);
foreach ($params as $key => $value) {
    $stringA .= $key . '=' . $value . '&';
    $xml .= '<' . $key . '>' . $value . '</' . $key . '>';
}
$signTmp = $stringA . 'key=' . config('wx.mch_key');//拼接商户号
$sign = strtoupper(md5($signTmp));//签名后的32位字符
//将签名添加到xml中
$xml .= '<sign>' . $sign . '</sign>';
$xml .= '</xml>';

构造好参数之后,发送请求

//发起https请求
$url = 'https://api.mch.weixin.qq.com/pay/orderquery';
$res_xml = order_request($url, $xml);
$simpleXMLElement = simplexml_load_string($res_xml, 'SimpleXMLElement', LIBXML_NOCDATA);
//将SimpleXMLElement对象转为数组
$jsonStr = json_encode($simpleXMLElement);
$jsonArray = json_decode($jsonStr, true);

如果订单已经支付,更新为已支付状态,如果订单已退款,更新为退款状态

//更新订单状态
if (strval($jsonArray['return_code']) === 'SUCCESS') {
    if (strval($jsonArray['trade_state']) === 'SUCCESS') {
        if ($order['status'] !== 1) {
            // 支付成功
            $order['status'] = 1;
            $order['transaction_id'] = $jsonArray['transaction_id'];
        }
    } elseif (strval($jsonArray['trade_state']) === 'REFUND') {
        if ($order['status'] !== 3) {
            // 退款成功
            $order['status'] = 3;
            $order['transaction_id'] = $jsonArray['transaction_id'];
        }
    }
    $order->save();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客开发者

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

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

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

打赏作者

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

抵扣说明:

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

余额充值