精华内容
下载资源
问答
  • 能正常生成prepay_id给客户端,但是客户端支付成功后,微信异步回调接口一直没有接收到数据。网上查了好多原因:1、有说notify_url 地址不对的,不能带参数。这确实是一个注意的地方,但是我的url是OK的。2、有的是...

    用的lumen写的接口,APP支付。

    PHP 7 。微信支付。按照微信官网文档写的。能正常生成prepay_id给客户端,但是客户端支付成功后,微信异步回调接口一直没有接收到数据。网上查了好多原因:

    1、有说notify_url 地址不对的,不能带参数。这确实是一个注意的地方,但是我的url是OK的。

    2、有的是说接口接收微信xml数据时应该用 $xml = file_get_contents('php://input'); 因为PHP7把之前那个$GLOBAL 变量取消了。。。。但是我按照这个写,依然没有接收到数据。

    3、通过查NGINX访问日志,发现微信确实访问了我的回调接口,但是我这边就是接受不到数据。。。。。emmmmm

    4、最后同事。。。用了lumen里Request 里自带的getContent() 方法就能接受到。。。。

    5、看了一下getContent() 的源码

    public function getContent($asResource = false)

    {

    $currentContentIsResource = is_resource($this->content);

    if (\PHP_VERSION_ID < 50600 && false === $this->content) {

    throw new \LogicException('getContent() can only be called once when using the resource return type and PHP below 5.6.');

    }

    if (true === $asResource) {

    if ($currentContentIsResource) {

    rewind($this->content);

    return $this->content;

    }

    // Content passed in parameter (test)

    if (is_string($this->content)) {

    $resource = fopen('php://temp', 'r+');

    fwrite($resource, $this->content);

    rewind($resource);

    return $resource;

    }

    $this->content = false;

    return fopen('php://input', 'rb');

    }

    if ($currentContentIsResource) {

    rewind($this->content);

    return stream_get_contents($this->content);

    }

    if (null === $this->content || false === $this->content) {

    $this->content = file_get_contents('php://input');

    }

    return $this->content;

    }

    估计是走了 return stream_get_contents($this->content);

    但是查了一下 stream_get_contents($this->content);和file_get_contents('php://input'); 没看出什么区别。

    所以知道的大佬方便说一下嘛?

    说是Laravel会拦截所有输入。 如果您使用5.6之前的PHP,php://输入流只能被读取一次。 这意味着你需要从框架中获取数据。 您可以通过访问Request实例上的getContent方法来完成此操作,如下所示:

    $content = Request::getContent(); // Using Request facade

    /* or */

    $content = $request->getContent(); // If you already have a Request instance

    // lying around, from say the controller

    展开全文
  • {"appid":"wxbeb748455e4f8ed6","attach":"plan","bank_type":"CFT","cash_fee":"1","fee_type":"CNY","is_subscribe":"Y","mch_id":"1495469202","nonce_str":"758UWknMEURr8pax","openid":"ozHM_0WRA5-LzVX6TtK_uW...

    {"appid":"wxbeb748455e4f8ed6","attach":"plan","bank_type":"CFT","cash_fee":"1","fee_type":"CNY","is_subscribe":"Y","mch_id":"1495469202","nonce_str":"758UWknMEURr8pax","openid":"ozHM_0WRA5-LzVX6TtK_uWYZx-dw","out_trade_no":"420001548208496","result_code":"SUCCESS","return_code":"SUCCESS","return_msg":"OK","sign":"8D78363050A40A415931D736FE8347CB","time_end":"20190123095500","total_fee":"1","trade_state":"SUCCESS","trade_state_desc":"\u652f\u4ed8\u6210\u529f","trade_type":"JSAPI","transaction_id":"4200000239201901235930834056"}date:2019-01-23 09:55:33

    展开全文
  • 1、收取微信异步回调参数 //获取返回的xml格式数据 $payXml = file_get_contents("php://input"); //将xml格式转化为json格式 $jsonXml = json_encode(simplexml_load_string($payXml, 'SimpleXMLElement', LIBXML_...

    1、收取微信异步回调参数

    //获取返回的xml格式数据
    $payXml = file_get_contents("php://input");
    //将xml格式转化为json格式
    $jsonXml = json_encode(simplexml_load_string($payXml, 'SimpleXMLElement', LIBXML_NOCDATA));
    //将json格式转成数组格式
    $result = json_decode($jsonXml, true);
    

    2、是否支付成功并处理自己的业务逻辑

    if ($result) {
    	//如果成功返回
    	if ($result['return_code'] == 'SUCCESS') {
    	    if ($result['result_code'] == 'SUCCESS') {
    	    	// sign 值校验
    	        // 校验时不包含返回的 sign 字段,需踢除 sign 字段
    	        foreach($result as $k => $v) {
    	            if ($k == 'sign') {
    	                $sign = $result[$k];
    	                unset($result[$k]);
    	            };
    	        }
    	        //按字典排序
    	        ksort($result);
    	        //转为 url 键值对
    	        $signTemp = http_build_query($result);
    	        //md5处理,$key 为微信商户平台的 api 安全密钥
    	        $key = '';
    	        $signTemp = md5($signTemp.'&key='.$key);
    	        //转大写得最终 sign 值
    	        $resultSign = strtoupper($signTemp);
    	        //如果sign值正确
    	        if ($sign === $resultSign) {
    	            try {
    	            	//……
    	            	//……
    	            	//最后返回结果给微信
    		            $successArray = array(
    		                'return_code' => 'SUCCESS',
    		                'return_msg'  => 'OK'
    	                );
    	                return $this->arrayToXml($successArray);
    	            } catch (\Exception $e) {
    	            	$e->getMessage();
    	            }
    	        }
    	    } else {
    	        return false;
    	    }
    	} else {
    	    return false;
    	}
    }
    

    3、数组转xml

    function arrayToXml($arr)
    {
        $xml = "<xml>";
        foreach ($arr as $key=>$val)
        {
            if (is_numeric($val))
            {
                $xml.="<".$key.">".$val."</".$key.">";
            }
            else
                $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
        }
        $xml.="</xml>";
        return $xml;
    }
    
    展开全文
  • 之前在接触的项目中,微信支付回调函数都是使用以下变量获取POST数据:前提:php配置中,必须启用 always_populate_raw_post_data//php.ini 配置always_populate_raw_post_data = On//适用于...

    之前在接触的项目中,微信支付回调函数都是使用以下变量获取POST数据:

    前提:php配置中,必须启用 always_populate_raw_post_data

    1. //php.ini 配置
    2. always_populate_raw_post_data = On
    1. //适用于PHP版本:PHP 5 及之前
    2. //获取POST数据
    3. $xml = $GLOBALS['HTTP_RAW_POST_DATA'];

    由于之前的项目PHP版本为:php<7.0,所以使用 $GLOBALS['HTTP_RAW_POST_DATA'] 还是OK的;


    项目PHP版本升级到7.0之后的版本,微信支付回调使用上面的方法 ,获取不到数据,需要使用:

    1. //适用于PHP 7 之后
    2. $xml = file_get_contents("php://input");
        原因是PHP 7版本中已经移除了这个全局变量:'HTTP_RAW_POST_DATA',用 php://input 替代,使用 always_populate_raw_post_data 会导致在填充 $HTTP_RAW_POST_DATA 时产生 E_DEPRECATED 错误。

    [文章来源](https://blog.csdn.net/levent_007/article/details/80543552)
    展开全文
  • 能正常生成prepay_id给客户端,但是客户端支付成功后,微信异步回调接口一直没有接收到数据。网上查了好多原因: 1、有说notify_url 地址不对的,不能带参数。这确实是一个注意的地方,但是我的url是OK的。 2、有的...
  • 处理微信支付异步回调

    千次阅读 2018-09-29 09:28:40
    * 微信支付异步回调(只有异步回调对订单进行处理) */ public function wchatUrlBack() { $postStr = file_get_contents('php://input'); if (! empty($postStr)) { $postObj = simple...
  • 本篇文章给大家带来的内容是关于php微信支付回调异步处理过程,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。微信支付回调处理分为1.同步2.异步这里微信官方推荐使用 第二种php对微信回调...
  • 根据经验,这很大概率是微信支付回调没有设置好,先检查微信支付的3个产品有没有开通:《微信小程序调用支付JSAPI缺少参数: total_fee的解决办法》然后再看看微擎微赞系统有没有开启https功能:《微擎https与微信...
  • 接前同事工作继续做,微信支付成功后,异步回调通知一直在发。检查后发现是返回给微信的信息错了,直接return true了,“return true”和没有返回值效果是一样的。支付成功,在执行完要做的工作后,告诉微信成功了。...
  • 接前同事工作继续做,微信支付成功后,异步回调通知一直在发。检查后发现是返回给微信的信息错了,直接return true了,“return true”和没有返回值效果是一样的。支付成功,在执行完要做的工作后,告诉微信成功了。...
  • public function returnpay(){ // 获取微信回调的数据  $notifiedData = file_get_contents('php://input');  //XML格式转换  $xmlObj = simplexml_load_string($notifiedData, 'SimpleXMLElement', LIBXM...
  • 本文介绍了微信支付异步回调通知,退款异步回调通知的代码实例,如有不足的请提出,我会做出改正。 二、官方文档 支付异步回调通知:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_7&amp;...
  • 在写这之前 看了好多文档,有好多坑在里面,通过多半天的努力终于把验证的问题搞出来了我也不理解微信官网文档写的那么不清晰,一个简单的介绍就能介绍明白,弄一大堆还没写明白,下面直接把我实操的验证贴上,供...
  • 微信支付WXPayEntryActivity 不回调

    万次阅读 2018-10-16 10:58:51
    微信支付同步回调不回调问题记录 1.微信支付官方文档 ... 第三方的东西都是比较简单的,直接看...有同步回调结果和异步回调结果,一般官方建议以异步回调结果为准,所以我们在同步回调结果判断支付成功后,去请求...
  • PHP处理微信支付回调

    2018-05-18 14:20:00
    我们已经知道,微信无论是微信内置JSAPI支付、H5外部浏览器支付、扫码支付,都需要通过异步回调接收支付结果。 本文简介如何获取微信支付通知。 仅需要一个在之前设置好的回调地址的方法里写上如下: //处理...
  • 微信支付所需的条件配置已经完成,接下来就开始实现(以下仅供参考) 一,实现准备 ①,阅读官方支付文档,主要是业务流程这一点https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_4 ②,官方demo下载...
  • 微信支付回调处理

    千次阅读 2019-01-22 15:34:45
    微信支付回调处理 微信官方支付文档: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_1 官方DEMO: ... // 微信支付异步通知 public function app_notify() ...
  • 微信支付回调处理分为1.同步2.异步这里微信官方推荐使用 第二种php对微信回调异步处理//获取返回的xml$testxml = file_get_contents("php://input");//将xml转化为json格式$jsonxml = json_encode(simplexml_load_...
  • 微信支付回调处理分为1.同步2.异步这里微信官方推荐使用 第二种 php对微信回调异步处理 //获取返回的xml $testxml = file_get_contents("php://input"); //将xml转化为json格式 $jsonxml = json_encode(simplexml_...
  • 微信无论是微信内置JSAPI支付、H5外部浏览器支付、扫码支付,都需要通过异步回调接收支付结果。 本文简介如何获取微信支付通知。 仅需要一个在之前设置好的回调地址的方法里写上如下: //处理微信支付回调 ...
  • 开发微信支付的过程中,可能所有的流程都搞明白了,可能在配置公众号的支付授权目录时会遇到问题,会不大好理解。 如果支付授权目录没有设置正确,在请求JSAPI时,会提示“3当前页面的url未注册”的错误。   ...
  • 支付的时候设置了异步回调地址微信回调返回的数据是xml1直接用post或者get是获取不到微信返回的数据,需要使用 file_get_contents("php://input");实现代码/*** @return string*/public function notify(): string{$...
  • 在新版本的微信支付SDK中(本人使用的是:php_sdk_v3.0.10),微信支付回调返回的是数据类型是:对象。在一般的小程序商城中,接收微信支付回调后,就是对订单支付状态的更改,从未支付->已经支付,并对相对应产品...
  • 微信无论是微信内置JSAPI支付、H5外部浏览器支付、扫码支付,都需要通过异步回调接收支付结果。 本文简介如何获取微信支付通知。 仅需要一个在之前设置好的回调地址的方法里写上如下: //处理微信支付回调 ...
  • //微信支付以分为单位  $input->SetNotify_url("http://~~~~~/WxPayNotify");//需要自己写的notify.php  $input->SetTrade_type("JSAPI");  $input->SetOpenid($data['openid']); //由小程序端传给...

空空如也

空空如也

1 2 3 4 5
收藏数 99
精华内容 39
关键字:

微信支付异步回调php