1. 不要直接使用demo中的notify.php,重写notify.php,继承WxPayNotify(可参考微信api),具体如下:
  2.  
  3. require_once "WxPay.Api.php";
  4.  
  5. require_once 'WxPay.Notify.php';
  6.  
  7. class PayNotifyCallBack extends WxPayNotify
  8.  
  9. {
  10.  
  11. //查询订单
  12.  
  13. public function Queryorder($transaction_id)
  14.  
  15. {
  16.  
  17. $input = new WxPayOrderQuery();
  18.  
  19. $input->SetTransaction_id($transaction_id);
  20.  
  21. $result = WxPayApi::orderQuery($input);
  22.  
  23. if (array_key_exists("return_code", $result)
  24.  
  25. && array_key_exists("result_code", $result)
  26.  
  27. && $result["return_code"] == "SUCCESS"
  28.  
  29. && $result["result_code"] == "SUCCESS"
  30.  
  31. ) {
  32.  
  33. return true;
  34.  
  35. }
  36.  
  37. return false;
  38.  
  39. }
  40.  
  41. //重写回调处理函数
  42.  
  43. public function NotifyProcess($data, &$msg)
  44.  
  45. {
  46.  
  47. $notfiyOutput = array();
  48.  
  49. if (!array_key_exists("transaction_id", $data)) {
  50.  
  51. $msg = "输入参数不正确";
  52.  
  53. return false;
  54.  
  55. }
  56.  
  57. //查询订单,判断订单真实性
  58.  
  59. if (!$this->Queryorder($data["transaction_id"])) {
  60.  
  61. $msg = "订单查询失败";
  62.  
  63. return false;
  64.  
  65. }
  66.  
  67. //$data中各个字段在return_code为SUCCESS的时候有返回 SUCCESS/FAIL
  68.  
  69. //此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
  70.  
  71. //成功后写入自己的数据库
  72.  
  73. if ($data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS') {
  74.  
  75. //自己的业务逻辑
  76.  
  77. $out_trade_no = $data['out_trade_no'];
  78.  
  79. $transaction_id = $data['transaction_id'];
  80.  
  81. $bank_type = $data['bank_type'];
  82.  
  83. $fee_type = $data['fee_type'];
  84.  
  85. $time_end = $data['time_end'];
  86.  
  87. $amount = $data['total_fee'];
  88.  
  89. }
  90.  
  91. return true;
  92.  
  93. }
  94.  
  95. }
  96.  
  97. $notify = new PayNotifyCallBack();
  98.  
  99. $notify->Handle(false);

  自己的代码改写:将微信支付成功后,获取他的微信生成的订单号 trade_no,然后保存到数据库中,为以后退款做准备,微信退款就是根剧这个订单号来退款

  1. 不要直接使用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';

  1. /**
  2. * 微信支付回调类
  3. * Class notify
  4. */
  5. class notify extends WxPayNotify
  6. {
  7. /**
  8. * 重写父类异步验证
  9. * @param array $data
  10. * @param string $msg
  11. * @return bool
  12. */
  13. public function NotifyProcess($data, &$msg)
  14. {
  15. $bool = false;
  16. //返回状态码、业务结果
  17. if (array_key_exists("return_code", $data) && array_key_exists("result_code", $data) && $data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS')
  18. {
  19. //查询订单
  20. if (isset($data["out_trade_no"]) && $data["out_trade_no"] != "")
  21. {
  22. $input = new WxPayOrderQuery();
  23. $input->SetOut_trade_no($data["out_trade_no"]);//商户订单号
  24. $result = WxPayApi::orderQuery($input);//订单查询
  25. $tip = '信息:微信公众号交易,订单金额与实际支付不一致';
  26. //这里针对微信订单号作特殊处理,去掉后面的16位字符
  27. $ordersn = substr($data['out_trade_no'],0,strlen($data['out_trade_no'])-16);
  28. if (isset($result['total_fee']) && Common::total_fee_confirm($ordersn, $result['total_fee'] / 100, $tip))
  29. {
  30. $bool = true;
  31. $method = Common::C('mobile');
  32.  
  33. Common::pay_success($ordersn, $method['method']['8']['name']);
  34. $online_transaction_no = array('source'=>'wxpay','transaction_no'=>$data['transaction_id']);
  35. //写入微信订单号
  36. DB::update('member_order')->set(array('online_transaction_no'=>json_encode($online_transaction_no)))
  37. ->where('ordersn','=',$ordersn)
  38. ->execute();
  39.  
  40. }
  41. }
  42. else
  43. {
  44. new Pay_Exception("信息:微信公众号下单,未会返回商品订单号");
  45. }
  46. }
  47. else
  48. {
  49. new Pay_Exception("信息:微信公众号交易错误(msg_{$data['return_msg']})");
  50. }
  51. return $bool;
  52. }
  53. }

  

支付地址
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

微信支付的notify.php中如何获取订单号(php版)的更多相关文章

  1. 微信公众号支付JSAPI网页,total_fee错误不正确,header重定向参数丢失,无法获取订单号和金额解决

    微信公众号支付官方demo错误, 公众号支付只能用在微信里,也就是微信内部浏览器. 1.到WxPayHubHelper.php文件 JsApi_pub()类下createOauthUrlForCode ...

  2. 微信支付报错:app没有获取微信支付权限

    调试微信支付的时候报错: Array( [return_code] => FAIL [return_msg] => 您没有APP支付权限) 查询了,发现自己将之前的公众号支付的APPID一 ...

  3. 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)

    本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...

  4. android 中怎样获取IMEI号

    1)在Telephony Framework内部.能够直接使用GSMPhone或GeminiPhone提供的接口. KK之前的版本号: IMEI(International Mobile Equipm ...

  5. SAP中对于获取订单的状态

    在SAP中对于如何获取订单的状态,提供了至少两个函数,分别是 STATUS_READ 和   STATUS_TEXT_EDIT.下面简单介绍这两个函数 1.STATUS_READ  改函数的实现原理大 ...

  6. 微信支付特约商户进件中base64格式图片上传

    微信图片上传接口地址:https://api.mch.weixin.qq.com/v3/merchant/media/upload 1.上传方法 1 using HttpHandlerDemo; 2 ...

  7. .net mvc 微信支付

    一.微信第三方登录 通过微信打开链接:http://www.hzm.com/Entry/Login 微信OAuth2.0授权登录目前支持authorization_code模式,适用于拥有server ...

  8. 手把手教你springboot集成微信支付

    20220727 最近要做一个微信小程序,需要微信支付,所以研究了下怎么在 java 上集成微信支付功能,特此记录下. 本文完整代码:点击跳转 准备工作 小程序开通微信支付 首先需要在微信支付的官网点 ...

  9. 微信小程序-统一下单、微信支付(Java后台)

    1.首先分享 微信统一下单接口: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1   微信接口 签名 对比网址: https: ...

随机推荐

  1. EasyUI 添加一行的时候 行号出现负数的解决方案

    原因是:在jquery_easyui.js 看方法 insertRow : function(_736, _737, row) 以下小代码算行号,if (opts.pagination) { _73c ...

  2. php表单中如何获取单选按钮与复选按钮的值(示例)

    转载:http://www.php.cn/php-weizijiaocheng-360027.html php代码中获取表单中单选按钮的值:(单选按钮只能让我们选择一个,这里有一个“checked”属 ...

  3. 数据结构与算法--最短路径之Dijkstra算法

    数据结构与算法--最短路径之Dijkstra算法 加权图中,我们很可能关心这样一个问题:从一个顶点到另一个顶点成本最小的路径.比如从成都到北京,途中还有好多城市,如何规划路线,能使总路程最小:或者我们 ...

  4. IDEA创建Struts2报错——web.xml

    这里记录一个问题,用IDEA创建Struts2时会出现的错误,cannot resolve class or package ‘filter’,出现在web.xml文件中,不修改这个,那么你配置好了T ...

  5. EasyUI动态改变输入框width

    function changeEUIBoxWidth(id, width){ $('#'+id).parent().find($('span:eq(0)')).css('width',width+'p ...

  6. JS 正则截取字符串

    1.js截取两个字符串之间的内容: varstr = "aaabbbcccdddeeefff"; str = str.match(/aaa(\S*)fff/)[1]; alert( ...

  7. js-ES6学习笔记-字符串的扩展

    1.codePointAt方法是测试一个字符由两个字节还是由四个字节组成的最简单方法.codePointAt方法会正确返回32位的UTF-16字符的码点. function is32Bit(c) { ...

  8. Fiddler抓包使用教程-会话图标

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72933882 本文出自[赵彦军的博客] 使用fiddler抓包时,会看到左侧按照顺 ...

  9. Django from表单及ajax提交文件

    参考: https://blog.csdn.net/baobao267/article/details/83038323

  10. 【Python】控制鼠标点击

    from pymouse import PyMouse m = PyMouse() a = m.position() #获取当前坐标的位置 print(a) m.move(50, 500) #鼠标移动 ...