这两天优化了一下支付宝支付和微信支付订单回调的问题,之前我们的订单都是用手动回调给服务器,现在改成支付宝和微信原生的异步回调,结果并没有像我们想象的那么简单,支付宝是很顺利的解决回调,用一般的方式接收即可,但是微信接收时用普通的接收方式是不行的必须用另一种方式,如下且看:

支付宝和微信的回调地址notifyUrl = RequestUrl.BASE_URL+"order/order_payment"+"?order_code="+orderCode;

服务器端是PHP开发,因此此处以PHP为例:

支付宝接收回调的方法/**

* sCreater

* function:订单支付完成后回写数据库(支付宝支付回调)

* @return json

*/

public function actionOrder_payment(){

$getData = $this->_requestData;

parent::write_log('order/order_payment',$getData);

if (empty($getData['order_code'])){

$data = array(

'error_code' => 1,

'error_msg' => '参数错误',

'data' => ''

);

parent::json_encode($data);

}

if (!empty($getData['trade_status']) || $getData['trade_status'] =='TRADE_SUCCESS') {

LinshiOrderMaster::confirmPayment($getData['order_code'],$getData['price'],'2',$getData['trade_no']);

$data = array(

'error_code' => 0,

'error_msg' => '支付成功',

'data' => ''

);

parent::json_encode($data);

}

}

支付宝服务器返回的数据{

"_id": ObjectId("55ec4550c6fdc2f03d8b48c5"),

"name": "order/order_payment",

"server_url": "http://api.xxx.**/v1.5.4/order/order_payment",

"accept_data": {

"order_code": "15090604451164",

"discount": "0.00",

"payment_type": "1",

"subject": "陈*梅",

"trade_no": "2015090600001000310060229256",

"buyer_email": "*********@qq.com",

"gmt_create": "2015-09-06 18:29:13",

"notify_type": "trade_status_sync",

"quantity": "1",

"out_trade_no": "090618284176257",

"seller_id": "2088021159681245",

"notify_time": "2015-09-06 21:53:20",

"body": "课程支付",

"trade_status": "WAIT_BUYER_PAY",

"is_total_fee_adjust": "Y",

"total_fee": "0.01",

"seller_email": "xxxpay@xxx.biz",

"price": "0.01",

"buyer_id": "2088302454945312",

"notify_id": "4e25737fd44a50070bbaa6f2eac2c39e3q",

"use_coupon": "N",

"sign_type": "RSA",

"sign": "******4GyXJaugFZqoiRQ4DE5VOn/EQjohiCulI5jRuogGiFb7ncZv/FjgZVD00QrnDGxYT8+XUAKThAQ01kCEHJJMLKHMxix9NXdeh8thXcDRBX/MJOnc4C/J8tk+U1D4VwkL1c [...]"

},

"header": [

],

"time": "21:53:20"

}

微信接收回调方法/**

* sCreater: miki

* function:订单支付完成后回写数据库(微信支付回调)

* @return json

*/

public function actionOrder_wx_payment(){

$postStr  = $GLOBALS["HTTP_RAW_POST_DATA"];

$getData = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

parent::write_log('order/order_wx_payment',$getData);

if (empty($getData['order_code'])){

$data = array(

'error_code' => 1,

'error_msg' => '参数错误',

'data' => ''

);

parent::json_encode($data);

}

if (!empty($getData['result_code']) || $getData['result_code'] =='SUCCESS') {

LinshiOrderMaster::confirmPayment($getData['order_code'],$getData['total_fee']/100,'1',$getData['transaction_id']);

$data = array(

'error_code' => 0,

'error_msg' => '支付成功',

'data' => ''

);

parent::json_encode($data);

}

}

微信接口返回的数据{

"_id": ObjectId("55ed2bcdc6fdc2c83d8b4e79"),

"name": "order/order_payment",

"server_url": "http://api.xxx.***/v1.5.4/order/order_payment",

"accept_data": {

"appid": "wx8be381be5d594578",

"bank_type": "COMM_DEBIT",

"cash_fee": "1",

"fee_type": "CNY",

"is_subscribe": "N",

"mch_id": "1240212802",

"nonce_str": "9a3d458322d70046f63dfd8b0153ece4",

"openid": "*********YfgoQPliYWg",

"order_code": "15090604453558",

"out_trade_no": "5d79099fcdf499f12b79770834c0164a",

"result_code": "SUCCESS",

"return_code": "SUCCESS",

"sign": "D2AD1EE0F4890FA23B424AC2A94E0CE4",

"time_end": "20150907141237",

"total_fee": "1",

"trade_type": "APP",

"transaction_id": "1006410556201509070811059912"

},

"header": [

],

"time": "14:16:45"

}

注:

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服务端接收数据的方式也不一样,切记,写此博文方便大家不再走弯路,与君共享! 另外如果有jsp方面的还请大家一起分享,一起进步。

微信支付宝服务器在哪里,支付宝支付与微信支付服务端回调notify_url数据的区别...相关推荐

  1. 聚播微信多开客服系统二次开发SDK服务端接口

    聚播微信多开客服系统二次开发SDK服务端接口 case HeartBeatReq: {// 客户端发送的心跳包heartBeatReqHandler.handleMsg(ctx, msgVo);bre ...

  2. windows服务器搭建原神私服教程(附客户端+服务端+环境配置)

    今天给大家带来的是windows服务器搭建原神私服的教程,服务端搭建于私人windows服务器,客户端支持情况:PC.iOS支持国服 /国际服均可,Android仅支持国际服.本篇文章附有客户端和服务 ...

  3. 支付宝APP支付 统一下单 php服务端 tp5

    /*支付宝第三方支付 * *生成APP支付订单信息 * @param number uid 用户id * @param string token 用户token * @param number oid ...

  4. 微信指纹服务器,华为公布10月底完成微信指纹适配,网友:等了三年终于有结果...

    原标题:华为公布10月底完成微信指纹适配,网友:等了三年终于有结果 虽然微信是可以支持指纹支付的,但在实际操作中却和理论上有点不一样,只有极少数手机支持微信的指纹支付,多数机型对微信的指纹支付功能视而 ...

  5. 微信各地服务器如何同步,彻底搞清楚并实现多端同步登录

    1.如何判断用户已经登录 可以利用本地缓存判断用户是否已经登录.如:在 main.js 中封装了检查登录函数,并跳转到登录页面Vue.prototype.isLogin = function(){ t ...

  6. 王者荣耀 微信登录 服务器找不到,王者荣耀微信无法登录是怎么回事 具体解决方法...

    王者荣耀微信无法登录?许多玩家都遇到过王者荣耀无法登陆的情况,特别是在3月30日出现了微信区登录异常,无法参与对战.这究竟是怎么回事?接下来咱们就来了解下王者荣耀微信无法登录的原因. 王者荣耀微信无法 ...

  7. 微信群服务器失败是什么原因,为什么微信群转让群主失败?微信群转让群主方法是什么?...

    为什么微信群转让群主失败?微信群转让群主方法是什么?如果你是微信群的群主,您可以转让微信群主的身份给别人哦,有微信用户表示微信群转让群主失败,为什么微信群转让群主失败呢?接下来小编会为大家回答哦. 微 ...

  8. 金融支付类APP测试方法——服务端部分

    支付APP架构简介 框架 说明 测试 难点 解决方案 逻辑图 举例 支付APP架构简介 框架 说明 市场上使用的APP在调用第三方支付的时候都是类似上面架构. 其大部分逻辑都在服务端实现: 1.到第三 ...

  9. ios 支付验证 php,PHP服务端验证APPLE支付的收据

    使用服务器来交付内容,我们还需要做些额外的工作来验证从Store Kit发送的收据信息. 重要信息:来自Store的收据信息的格式是专用的. 你的程序不应直接解析这类数据.可使用如下的机制来取出其中的 ...

最新文章

  1. Proteus与Keil联调
  2. Objective-C之null NaN undefined
  3. 127.0.0.1 myz.php,XXE漏洞总结 · MYZ’s Blog
  4. 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
  5. ofstream/ifstream 文本/二进制 方式 读入/写出 数据方法
  6. WORD如何缩小编号与文本之间的距离?
  7. sqlserver evaluation是什么版本_SQL Server 基础知识
  8. Oracle PL/SQL中异常高级特性
  9. android横向滑动控件,Android学习——HorizontalScollview水平滚动控件
  10. poj 1276 Cash Machine 背包问题
  11. 2019 全国大学生电子设计竞赛题目
  12. vue使用ionic图标_Ionic团队的Vue图标集组件
  13. mess组网 中继_还在用无线路由器中继?快来看乙辰科技全新更智能的无线Mesh组网...
  14. Android——最佳性能实战
  15. 无线AP概念功率mW、灵敏度dBm、增益dBi
  16. matlab如何在等值线填充图上叠加等值线
  17. java连接 mdx,olap4j连接sap hana的xmla服务mdx查询报错【已解决】
  18. 【蓝桥杯】第十四届模拟赛第一期及第二期填空汇总
  19. 使用matlab设计IIR巴特沃斯低通滤波器
  20. 【回答问题】ChatGPT上线了!如何使用控制算法或动力学模型控制PreScan搭建的仿真环境及相关车辆的运动状态?

热门文章

  1. 1024程序猿节:揭秘腾讯老中青三代程序猿工位
  2. nginx日志配置指令详解
  3. NodeJS使用ES6
  4. 一张图看懂小程序全生态
  5. 初学者如何选择合适的机器学习算法(附算法速查表)
  6. mysql模糊查询 % , _ ,[], [^] 的区别
  7. Git、GitHub、GitLab三者之间的联系以及区别
  8. flatmap和map的区别!
  9. SQL 中 left join、right join、inner join 的区别
  10. 左神算法:求最大子矩阵的大小(Java版)