2018-06-10支付宝支付与微信支付服务端回调notify_url数据的区别

您现在的位置是: 首页 > PHP技术 > 支付宝支付与微信支付服务端回调notify_url数据的区别

314次阅读


一、微信支付回调方法示例代码及微信返回的值


// 微信支付回调
public function wxPayNotify(){

    $input = file_get_contents('php://input');
    $obj = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
    $res = json_decode(json_encode($obj), true);

    if ($res['return_code'] == 'SUCCESS') { //如果支付成功
        //===============修改订单状态===========================//
        $orderSn = $res['out_trade_no'];//获取订单号
        $where['order_sn'] = $orderSn;

        $data = array(
            'pay_status' => 1,
            'pay_time' => time()
        );
        $update = M('Order')->where($where)->update($data);//修改订单状态
        if($update!==false){
            $result = array('return_code' => 'SUCCESS', 'return_msg' => 'OK');
            echo arrayToXml($result);
            exit();
        }else{
            $result = array('return_code' => 'FAIL');
            echo arrayToXml($result);
            exit();
        }
    }

}


返回的数据,格式为xml


<xml>
   <appid>wx2421b1c4370ec43b</appid>
   <attach>支付测试</attach>
   <body>APP支付测试</body>
   <mch_id>10000100</mch_id>
   <nonce_str>1add1a30ac87aa2db72f57a2375d8fec</nonce_str>
   <notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
   <out_trade_no>1415659990</out_trade_no>
   <spbill_create_ip>14.23.150.211</spbill_create_ip>
   <total_fee>1</total_fee>
   <trade_type>APP</trade_type>
   <sign>0CB01533B8C1EF103065174F50BCA001</sign>
</xml>


二、微信支付回调方法示例代码及微信返回的值

    // 支付宝支付回调
    public function aliPayNotify(){

    // 这种行不通,why ? 因为支付宝返回的不是xml格式 , 是json格式
    // $input = file_get_contents('php://input');
    // $obj = simplexml_load_string($input, 'SimpleXMLElement', LIBXML_NOCDATA);
    // $res = json_decode(json_encode($obj), true);

        if ($_POST['trade_status'] == 'TRADE_SUCCESS') {//如果支付成功
            //===============修改订单状态===========================//
            $orderSn = $_POST['out_trade_no'];//获取订单号
            $where['order_sn'] = $orderSn;

            $data = array(
                'pay_status' => 1,
                'pay_time' => time()
            );
            $update = M('Order')->where($where)->update($data);//修改订单状态
            if($update!==false){
                echo 'success';
                exit;
            }else{
                echo 'fail';
                exit;
            }
       }

    }


返回的数据,格式为json

{
    "gmt_create":"2018-06-10 21:55:41",
    "charset":"UTF-8",
    "seller_email":"tesougou@126.com",
    "subject":"\u8ba2\u5355\u53f7Array",
    "sign":"A1a6+0gSHLHaxPTkTUIDDyN0TBWzjEOatUe1yzvKgHFa9epPLBoQK5t4nnjHxJZap1KUOsX4enAFKBoJM+otB\/+6vUdqAH8DL2WZ\/pdEZRmzuws6\/kk0qd+DWycaNTLKysItUDdIc88\/IcWtVd0RyfY16TxtM1qjgYhkCQDclW3I8CB3AWLdU9S3oljdHtPVqppYlbsHMypjkAaz89xgPaFyn8MRYJU7ALPjDyZ5toPvhsIHfXgzZEtKft02P3CksO6xg8n\/1dmf5Dc5i8t5UvFyZVzvbboIkRA\/RgV90iSFDRpcKmrFqJApGvgNRUhlcSAHx8TZiqv9Oz8vdZHvnw==",
    "body":"\u8ba2\u5355\u53f7Array",
    "buyer_id":"2088002392375722",
    "invoice_amount":"0.01",
    "notify_id":"8513b724c60db878981c75fb283a394lk5",
    "fund_bill_list":"[{\"amount\":\"0.01\",\"fundChannel\":\"ALIPAYACCOUNT\"}]",
    "notify_type":"trade_status_sync",
    "trade_status":"TRADE_SUCCESS",
    "receipt_amount":"0.01",
    "app_id":"2017033106502760",
    "buyer_pay_amount":"0.01",
    "sign_type":"RSA2",
    "seller_id":"2088521367283087",
    "gmt_payment":"2018-06-10 21:55:42",
    "notify_time":"2018-06-10 21:55:42",
    "version":"1.0",
    "out_trade_no":"SH18061009553641171292",
    "total_amount":"0.01",
    "trade_no":"2018061021001004720553392846",
    "auth_app_id":"2017033106502760",
    "buyer_logon_id":"tem***@gmail.com",
    "point_amount":"0.00"
}


三、经验总结


注:

  1、回调地址之所以加了order_code="+orderCode,主要是便于更新订单的状态,并且支付宝和微信都会自动将我们带的参数插入到原生数据一起返回给我们的服务端;

  2、支付宝回调的方法只是普通的post接收即可;

  3、微信回调的方法用的关键代码在  $postStr  = $GLOBALS["HTTP_RAW_POST_DATA"];

  (1)支付成功通知的内容可以使用   $_GET 获取订单信息

  (2)接收微信后台发送过来的消息,该消息数据结构为XML,不是php默认的数据类型

    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

  (3)使用simplexml_load_string() 函数将接收到的XML消息数据载入对象$postStr中。  $getData = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 

 

 总结:支付宝支付和微信支付回调的区别就在于他们回调的数据方式不一样,所以app服务端接收数据的方式也不一样,切记,写此博文方便大家不再走弯路,与君共享!