微信支付的notify.php中如何获取订单号(php版)
不要直接使用demo中的notify.php,重写notify.php,继承WxPayNotify(可参考微信api),具体如下: require_once "WxPay.Api.php"; require_once 'WxPay.Notify.php'; class PayNotifyCallBack extends WxPayNotify { //查询订单 public function Queryorder($transaction_id) { $input = new WxPayOrderQuery(); $input->SetTransaction_id($transaction_id); $result = WxPayApi::orderQuery($input); if (array_key_exists("return_code", $result) && array_key_exists("result_code", $result) && $result["return_code"] == "SUCCESS" && $result["result_code"] == "SUCCESS" ) { return true; } return false; } //重写回调处理函数 public function NotifyProcess($data, &$msg) { $notfiyOutput = array(); if (!array_key_exists("transaction_id", $data)) { $msg = "输入参数不正确"; return false; } //查询订单,判断订单真实性 if (!$this->Queryorder($data["transaction_id"])) { $msg = "订单查询失败"; return false; } //$data中各个字段在return_code为SUCCESS的时候有返回 SUCCESS/FAIL //此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断 //成功后写入自己的数据库 if ($data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS') { //自己的业务逻辑 $out_trade_no = $data['out_trade_no']; $transaction_id = $data['transaction_id']; $bank_type = $data['bank_type']; $fee_type = $data['fee_type']; $time_end = $data['time_end']; $amount = $data['total_fee']; } return true; } } $notify = new PayNotifyCallBack(); $notify->Handle(false);
自己的代码改写:将微信支付成功后,获取他的微信生成的订单号 trade_no,然后保存到数据库中,为以后退款做准备,微信退款就是根剧这个订单号来退款
不要直接使用demo中的notify.php,重写回调页面notify.php,继承WxPayNotify(可参考微信api),具体如下:然后用它自带的方法查询出订单跟订单号保存到数据库中去
require_once dirname(dirname(__FILE__)) . "/lib/WxPay.Api.php";
require_once dirname(dirname(__FILE__)) . '/lib/WxPay.Notify.php';
/** * 微信支付回调类 * Class notify */ class notify extends WxPayNotify { /** * 重写父类异步验证 * @param array $data * @param string $msg * @return bool */ public function NotifyProcess($data, &$msg) { $bool = false; //返回状态码、业务结果 if (array_key_exists("return_code", $data) && array_key_exists("result_code", $data) && $data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS') { //查询订单 if (isset($data["out_trade_no"]) && $data["out_trade_no"] != "") { $input = new WxPayOrderQuery(); $input->SetOut_trade_no($data["out_trade_no"]);//商户订单号 $result = WxPayApi::orderQuery($input);//订单查询 $tip = '信息:微信公众号交易,订单金额与实际支付不一致'; //这里针对微信订单号作特殊处理,去掉后面的16位字符 $ordersn = substr($data['out_trade_no'],0,strlen($data['out_trade_no'])-16); if (isset($result['total_fee']) && Common::total_fee_confirm($ordersn, $result['total_fee'] / 100, $tip)) { $bool = true; $method = Common::C('mobile'); Common::pay_success($ordersn, $method['method']['8']['name']); $online_transaction_no = array('source'=>'wxpay','transaction_no'=>$data['transaction_id']); //写入微信订单号 DB::update('member_order')->set(array('online_transaction_no'=>json_encode($online_transaction_no))) ->where('ordersn','=',$ordersn) ->execute(); } } else { new Pay_Exception("信息:微信公众号下单,未会返回商品订单号"); } } else { new Pay_Exception("信息:微信公众号交易错误(msg_{$data['return_msg']})"); } return $bool; } }
支付地址
payment+application-classes-pay-mobile-wxpay.php submit
回调地址:获取微信生成的订单号
payment-application-vendor-mobile-wzpay-jsapi-notify.php
引入的类文件在vendor-mobile-wxpay-lib里面
微信支付宝退款操作方法:
tools-classes-pay-online-refund.php
链接: https://pan.baidu.com/s/18uSJf8fkDPo41zn-m74ObQ 密码: 18cg