微信并未提供一个统一的查询接口。对应每种查询均需要不同的api。为了便于大家在项目中使用,忽略细节。对以上三种进行了封装。通过工厂的方式降低调用成本。
$wxconfig = [
'app_id' => 'wxxxx', // 公众账号ID
'mch_id' => 'xxxx',// 商户id
'md5_key' => 'xxxxxx',// md5 秘钥
'notify_url' => '/pay-notify.html',
'time_expire' => '14',
// 涉及资金流动时,需要提供该文件
'cert_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_cert.pem',
'key_path' => dirname(__FILE__) . DIRECTORY_SEPARATOR . 'wx' . DIRECTORY_SEPARATOR . 'apiclient_key.pem',
];
use Payment\QueryContext;
use Payment\Common\PayException;
use Payment\Config;
$query = new QueryContext();
// 通过交易号查询, 推荐
$data = [
//'order_no' => '011402433464',// 商户订单号
'transaction_id' => '400757200107098672633287',// 微信订单查询 微信退款单查询
//'trans_no' => '100757043901142692427764', // 微信批量转款查询
];
try {
// 微信订单查询
$query->initQuery(Config::WEIXIN, $wxconfig);
// 微信退款订单状态查询
//$query->initQuery(Config::WEIXIN_REFUND, $wxconfig);
// 微信企业付款查询
//$query->initQuery(Config::WEIXIN_TRANS, $wxconfig);
$ret = $query->query($data);
} catch (PayException $e) {
echo $e->errorMessage();exit;
}
订单查询非常简单。对于微信支付订单以及退款订单可以根据微信支付的流水号进行查询。对于微信支付的订单还可根据商户的订单号进行查询。但是强烈建议通过微信自身的流水号进行查询。
对于批量转款查询。需要提供再转款时,生产的转款单号(此单号是由商家自行生产的)。这里我也蛮迷惑,为什么不提供使用微信返回的转款流水号进行查询呢?
接下来对返回值进行解释,以下结构为一个顶层结构
参数
参数名
参数说明
是否必须
is_success
成功标识
请求是否成功,T:成功,F:失败
是
error
错误提示
只有is_success=F时才返回
否
response
响应数据
查询成功后返回的数据,一个数组,is_success=T时返回
否
微信支付订单返回值
支付订单中关于 response 中包含字段的描述
参数
参数名
参数说明
是否必须
amount
交易金额
本次订单总金额,单位为元,最多两位小数
是
channel
支付渠道
本处取值: wx
是
order_no
商户网站唯一订单号
商户生成的订单号,必须确保在系统中唯一
是
buyer_id
用户标识
用户在商户appid下的唯一标识
是
trade_state
交易状态
支付成功与否,可取值:success not_pay
是
transaction_id
微信交易号
微信系统中的交易流水号,可用于查询订单状态
是
time_end
交易付款时间
格式为-07-28 16:01:01
是
微信退款订单
退款有以下两点需要注意
交易时间超过一年的订单无法提交退款;
微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。
由于一笔支付订单,可能存在多笔退单的情况,因此退款记录将返回一个数组
退款订单中关于 response 中包含字段的描述
参数
参数名
参数说明
是否必须
amount
交易金额
本次订单总金额,单位为元,最多两位小数
是
order_no
商户网站唯一订单号
商户生成的订单号,必须确保在系统中唯一
是
transaction_id
微信交易号
微信系统中的交易流水号,可用于查询订单状态
是
refund_data
退款数据
其结构是一个数组,每一个元素包含一个退单信息
是
refund_data 中包含字段的描述
参数
参数名
参数说明
是否必须
refund_no
商户退款单号
商户退款单号
是
refund_id
微信退款单号
微信退款单号
是
refund_channel
退款渠道
ORIGINAL—原路退款 BALANCE—退回到余额
是
refund_fee
退款金额
退款总金额,单位为元,可以做部分退款
是
refund_status
退款状态
SUCCESS—退款成功 FAIL—退款失败 PROCESSING—退款处理中 NOTSURE—未确定,需要商户原退款单号重新发起 CHANGE—转入代发
是
recv_accout
退款入账账户
退款入账账户
是
转款订单查询结果
'trans_id' => $data['detail_id'],// 付款单号
'trans_status' => $data['status'],// 转账状态
'reason' => $data['reason'],// 失败原因
'buyer_id' => $data['openid'],
'trans_name' => $data['transfer_name'],// 收款用户姓名
'trans_time' => $data['transfer_time'],
'desc' => $data['desc'],// 付款描述
参数
参数名
参数说明
是否必须
amount
付款金额
付款金额 单位元
是
order_no
商户单号
商户使用查询API填写的单号的原路返回.
是
trans_id
付款单号
调用企业付款API时,微信系统内部产生的单号
是
trans_status
转账状态
SUCCESS:转账成功 FAILED:转账失败 PROCESSING:处理中
是
reason
失败原因
如果失败则有失败原因
否
buyer_id
收款用户openid
收款用户openid
是
trans_name
收款用户姓名
真实姓名,如果是需要实名验证,则会返回
否
trans_time
转账时间
发起转账的时间 格式:-04-21 20:00:00
是
desc
付款描述
付款时候的描述
是