支付的时候设置了异步回调地址

微信回调返回的数据是xml

1

直接用post或者get是获取不到微信返回的数据,需要使用 file_get_contents("php://input");

实现代码

/**

* @return string

*/

public function notify(): string

{

$xmlstr = file_get_contents("php://input");

if(empty($xmlstr)) return '非法访问';

$xmlObj = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA);

$data = json_decode(json_encode($xmlObj),true);

if ($this->checkSign($data)) {

//校验通过,可以再增加对微信官方订单查询,判断订单真实性

return 'success';

}

return 'fail';

}

/**校验签名

* @param array $arr

* @return bool

*/

private function checkSign(array $arr): bool

{

$sign = $arr['sign'];

unset($arr['sign']);

$key='1234';//微信商户平台支付设置的key

ksort($arr);//根据key升序排序

$str=http_build_query($arr);//数组字典排序拼接字符串

$stringSignTemp = $str.'&key='.$key;//拼接上key

$signValue = md5($stringSignTemp);//md5处理

$signValue = strtoupper($signValue);//转大写

return $signValue == $sign;

}

也可以这样,直接使用官方SDK

require_once "../lib/WxPay.Api.php";

require_once '../lib/WxPay.Notify.php';

require_once "WxPay.Config.php";

require_once 'log.php';

//初始化日志

$logHandler= new CLogFileHandler("../logs/".date('Y-m-d').'.log');

$log = Log::Init($logHandler, 15);

class PayNotifyCallBack extends WxPayNotify

{

//查询订单

public function Queryorder($transaction_id)

{

$input = new WxPayOrderQuery();

$input->SetTransaction_id($transaction_id);

$config = new WxPayConfig();

$result = WxPayApi::orderQuery($config, $input);

Log::DEBUG("query:" . json_encode($result));

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;

}

/**

*

* 回包前的回调方法

* 业务可以继承该方法,打印日志方便定位

* @param string $xmlData 返回的xml参数

*

**/

public function LogAfterProcess($xmlData)

{

Log::DEBUG("call back, return xml:" . $xmlData);

return;

}

//重写回调处理函数

/**

* @param WxPayNotifyResults $data 回调解释出的参数

* @param WxPayConfigInterface $config

* @param string $msg 如果回调处理失败,可以将错误信息输出到该方法

* @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调

*/

public function NotifyProcess($objData, $config, &$msg)

{

var_dump($objData);

$data = $objData->GetValues();

//TODO 1、进行参数校验

if(!array_key_exists("return_code", $data)

||(array_key_exists("return_code", $data) && $data['return_code'] != "SUCCESS")) {

//TODO失败,不是支付成功的通知

//如果有需要可以做失败时候的一些清理处理,并且做一些监控

$msg = "异常异常";

return false;

}

if(!array_key_exists("transaction_id", $data)){

$msg = "输入参数不正确";

return false;

}

//TODO 2、进行签名验证

try {

$checkResult = $objData->CheckSign($config);

if($checkResult == false){

//签名错误

Log::ERROR("签名错误...");

return false;

}

} catch(Exception $e) {

Log::ERROR(json_encode($e));

}

//TODO 3、处理业务逻辑

Log::DEBUG("call back:" . json_encode($data));

$notfiyOutput = array();

//查询订单,判断订单真实性

if(!$this->Queryorder($data["transaction_id"])){

$msg = "订单查询失败";

return false;

}

return true;

}

}

$config = new WxPayConfig();

Log::DEBUG("begin notify");

$notify = new PayNotifyCallBack();

$notify->Handle($config, false);

php支付回调怎么写_php 微信支付回调校验的两种做法相关推荐

  1. php微信支付怎么来测试_PHP微信支付通知处理方式实现方法

    本文是对上篇文章的一个补充,主要是官方没有关于通知的demo,摸石头过河真的很难受,方便大家开发,放出来给大家看看 通知机制的实现,官方只有文档没有demo代码,对没搞过的人来说,需要花大量时间来做测 ...

  2. php支付回调怎么写_php如何接入微信支付回调接口?PHP如何验证微信支付签名?PHP处理微信支付回调的函数...

    需求:  安卓,ios端集成微信支付,PHPer(我)要提供一个接口给微信调用,(支付完成后调用),若是成功,就返回success,若是失败就返回fail,php 环境说明:thinkphp 框架开发 ...

  3. 微信支付:支付流程分析、微信扫码支付(HttpClient)、微信支付二维码生成、检测支付状态、订单状态操作准备工作、支付信息回调、MQ处理支付回调状态、定时处理订单状态

    微信支付 微信支付开发的整体思路 生成支付二维码 查询支付状态(微信的服务器) 实现订单状态的修改.删除订单 支付状态回查->微信服务器将支付状态返回给支付微服务 MQ处理支付回调状态 Rabb ...

  4. 企业微信通讯录回调密文解析及微信支付回调密文解析异常处理

    企业微信通讯录回调密文解析及微信支付回调密文解析异常处理 产生异常表现: javax.crypto.IllegalBlockSizeException: Input length must be mu ...

  5. php写的微信支付_安卓支付类文件

    <?php class wechat_Android_pay {/*配置参数*/private $config = array('appid' => "wx11111111111 ...

  6. 微信支付 postman_小刘同学微信支付接入全笔记

    走上"码农"这条路已经快一年半啦,做过不少的Demo和项目,也接触了不少的业务场景,8000w的大数据量处理,QPS500+的并发优化,也算是在开发的这条路上踏出了入门向前的步伐: ...

  7. 在线支付系列【15】微信支付实战篇之集成查询订单、支付通知API

    有道无术,术尚可求,有术无道,止于术. 文章目录 前言 主动调用 商户订单号查询 回调通知 1. 添加通知回调地址 2. 通知处理 3. 通知接口 4. 测试 前言 在上篇文档中,我们简单实现了Nat ...

  8. 在线支付系列【14】微信支付实战篇之Native支付下单

    有道无术,术尚可求,有术无道,止于术. 文章目录 Native支付 产品介绍 业务流程图 1. 下单 2. 支付 3. 并行处理 Native下单API 案例演示 1. 环境搭建 2. 创建商户订单 ...

  9. WordPress按钮秒支付插件发布,支持微信支付,支付宝,银联,京东,苏宁,易宝支付...

    痛点: 我们用WordPress建设网站和开发移动应用,有时候我们其实不需要太多的流程,只是需要一个收款通道,但是可能对支持的渠道更加关注,特别是手机应用.所以WordPress按钮秒支付插件诞生了, ...

最新文章

  1. java网络编程(一)
  2. left join 、right join 、inner join和 full join的区别
  3. SQL语句大全(2)
  4. Mongo数据库搭建
  5. 【渝粤教育】电大中专建筑材料 (4)作业 题库
  6. 網頁設計收藏站70個
  7. 先码后看 Spring源码解析 侵立删
  8. 如何高效做问卷调查?
  9. java jar apktool,apktool.jar
  10. Docker镜像安装宋体
  11. JavaEE简易聊天室(Netbeans:Servlet+Cookie+Session)
  12. 以太网未识别的网络win10_win10以太网为什么无Internet未识别网络?
  13. Unity lua os.time超过2038年1月19日3时14分07秒会出问题的解决办法(新千年虫问题、C#时间)
  14. iOS设计模式四部曲(二) 结构型模式 内附Demo
  15. js中将从ajax获得的时间戳数字串转换成理解的时间格式
  16. GlobalSign的旗下的SSL证书产品
  17. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 15
  18. 【java 高并发编程之JUC】2w字带你JUC从入门到精通
  19. 【PPT制作工具】超实用!有哪些鲜为人知却好用到爆的PPT辅助工具?
  20. JZOJ 4210. 【五校联考1day1】我才不是萝莉控呢

热门文章

  1. java中的static类_再议Java中的static关键字
  2. LInux下centos6.7 设置字符集,解决乱码问题
  3. 细数人们对安卓的误解
  4. [HDU 4842]--过河(dp+状态压缩)
  5. WP7游戏开发:TweeJump(cocos2d-xna)
  6. Mediator模式(C++中介者模式含个人Demo源码)
  7. Java 用接口实现加减乘除计算器
  8. centos7使用中文输入法
  9. 令新手头痛的java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet错误...
  10. Nginx前端设置反向代理,后端Apache如何获取访客的真实IP,结合PHP