博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
微信支付的notify.php中如何获取订单号(php版)
阅读量:5882 次
发布时间:2019-06-19

本文共 3705 字,大约阅读时间需要 12 分钟。

不要直接使用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

转载于:https://www.cnblogs.com/yszr/p/9552277.html

你可能感兴趣的文章
leetcode 110 Balanced Binary Tree
查看>>
python活用isdigit方法显示系统进程
查看>>
项目开发总结
查看>>
知行合一
查看>>
jmeter插件之jsonpath提取响应结果和做断言
查看>>
发布支持多线程的PowerShell模块 —— MultiThreadTaskRunner
查看>>
Ubuntu ctrl+alt会导致窗口还原的问题
查看>>
第四十期百度技术沙龙笔记整理
查看>>
推荐系统那点事 —— 基于Spark MLlib的特征选择
查看>>
linux 下RTL8723/RTL8188调试记录(命令行)【转】
查看>>
SpringMVC案例1——对User表进行CRUD操作
查看>>
[Contiki系列论文之1]Contiki——为微传感器网络而生的轻量级的、灵活的操作系统...
查看>>
Android 网络编程 记录
查看>>
微软同步发行Windows 10和Windows 10 Mobile系统更新
查看>>
Zeppelin的入门使用系列之使用Zeppelin运行shell命令(二)
查看>>
form表单下的button按钮会自动提交表单的问题
查看>>
那些年追过的......写过的技术博客
查看>>
python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列
查看>>
C# 解决窗体闪烁
查看>>
CSS魔法堂:Transition就这么好玩
查看>>