zoukankan      html  css  js  c++  java
  • 微信支付的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

  • 相关阅读:
    canvas,制作炫酷的时钟和倒计时
    【bzoj2142】【礼物】拓展Lucas定理+孙子定理
    【hdu3652】数位dp(浅尝ACM-A)
    【bzoj4152】【The Captain】最短路(堆优化)(浅尝ACM-B)
    【bzoj2190】【仪仗队】欧拉函数+线性筛(浅尝ACM-J)
    【bzoj1087】【互不侵犯King】状压dp裸题(浅尝ACM-D)
    【bzoj1566】【管道取珠】竟然是dp题(浅尝ACM-E)
    【bzoj2957】【楼房重建】另类的线段树(浅尝ACM-H)
    【codevs1907】【方格取数3】二分图最大带权独立集
    二分图变种之最小路径覆盖、最小点覆盖集【poj3041】【poj2060】
  • 原文地址:https://www.cnblogs.com/yszr/p/9552277.html
Copyright © 2011-2022 走看看