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

微信支付的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. asp.net core webapi 使用ef 对mysql进行增删改查,并生成Docker镜像构建容器运行

    1.构建运行mysql容器,添加数据库user 参考Docker创建运行多个mysql容器,地址 http://www.cnblogs.com/heyangyi/p/9288402.html 添加us ...

  2. 第20课-数据库开发及ado.net 可空值类型,资料管理器,多条件查询,Case

    第20课-数据库开发及ado.net 可空值类型,资料管理器,多条件查询,Case SqlHelper using System; using System.Collections.Generic; ...

  3. Nginx初探

    nginx是一款轻量级的web服务器.反向代理服务器和电子邮件服务器,占有内存少,并发能力强. 本文将简单介绍如何安装.启动nginx,部署web项目,应用反向代理. 一.安装 可参考https:// ...

  4. 学习Spring.Net:1.简单的应用之控制台

    1.开始. 2.新建一个控制台,我们新建一个SpringNetTest类. using System; using System.Collections.Generic; using System.L ...

  5. RocketMQ 主从同步机制

    主从同步(HA 高可用) 主从同步原理: 为了保证系统的高可用,消息到达主服务器后,需要将消息同步到从服务器.如果主服务器宕机,消费者可用从从服务器拉取消息. 大体步骤: 1.主服务器启动,监听从服务 ...

  6. POJ2387(KB4-A)

    Til the Cows Come Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 54716   Accepted ...

  7. TFS 打得你措手不及!TF53001:管理员已取消数据库操作

    心塞.公司TFS突然挂了.签入获取 一直报 TF53001:管理员已取消数据库操作.公司开发部开发进度一下就受阻了.刚好有时关键时期. 在 老总的帮助下根据搜到的资料 .搞定了这个问题!问题出在数据库 ...

  8. 一起来看看JavaScript中==和===有何不同

    '; // => true 如果其中一个值是true,则将其转换为1再进行比较.如果其中一个值是false,则将其转换为0再进行比较: true == 0; // => false fal ...

  9. Ubuntu下自定义调整CPU工作频率(用于省电或提高性能都好用)

    昨天高铁上拿T480切win10系统看电影,为了节电给细调了个省电策略(设置CPU性能30%),不知是不是因为这个原因,今天切回Ubuntu1604工作导致CPU工作频率非常低. 查阅了一下相关方法, ...

  10. 解除mysql只有本机可以访问的限制

    1.终端:sudo vim /etc/mysql/my.cnf 2.找到bind-address,注释掉(前面加#) 这里出现问题,发现my.cnf打开根本没有bind-address,但是多了两句话 ...