payment 项目2.0版本
微信并未提供一个统一的查询接口。对应每种查询均需要不同的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;}
订单查询非常简单。对于微信支付订单以及退款订单可以根据微信支付的流水号进行查询。对于微信支付的订单还可根据商户的订单号进行查询。但是强烈建议通过微信自身的流水号进行查询。
对于批量转款查询。需要提供再转款时,生产的转款单号(此单号是由商家自行生产的)。这里我也蛮迷惑,为什么不提供使用微信返回的转款流水号进行查询呢?
接下来对返回值进行解释,以下结构为一个顶层结构
微信支付订单返回值
支付订单中关于response
中包含字段的描述
微信退款订单
退款有以下两点需要注意
交易时间超过一年的订单无法提交退款;
微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。
由于一笔支付订单,可能存在多笔退单的情况,因此退款记录将返回一个数组
退款订单中关于response
中包含字段的描述
refund_data
中包含字段的描述
转款订单查询结果
'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'],// 付款描述