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

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

支付宝和微信的回调地址

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": "[email protected]",

"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方面的还请大家一起分享,一起进步。

时间: 2025-01-04 11:18:32

支付宝支付与微信支付服务端回调notify_url数据的区别的相关文章

【zhifu】web开发中的支付宝支付和微信支付

一.支付类型: 支付宝支付: 支付宝app内的网页支付: app外(即普通浏览器)网页支付: 微信支付: 微信app内的支付(在这里叫公众号支付) app外的支付(微信H5支付): 微信公众号的支付宝支付: 二.微信内支付 微信浏览器内调起微信支付也就是微信公众号支付有2种实现方式 1.使用微信的内置js对象 WeixinJSBridge(本人使用的此方法)交易类型:jsapi function onBridgeReady(){ WeixinJSBridge.invoke( 'getBrandW

微信公众号中的支付宝支付与微信支付

一般,在微信公众号中的商城都是需要支持微信支付和支付宝支付的,当然,较大的公司对于鹅厂和阿里的站队就不说了,所以这里简单记录一下支付宝支付和微信支付的主要流程.说是简单介绍,这是因为确实不难,因为前端在这方面,包括微信授权登陆这一块需要做的都不是很多,而主要的工作量都在后端部分. 支付宝支付 无论是支付宝支付还是微信支付,最开始的步骤当然是将商品列表.商家相关信息.用户remark.运费.总价等等支付需要的信息通过post请求向后端传递,这里介绍支付宝支付,所以假设用户选择的是支付宝支付,那么后

MD5加密支付宝支付与微信支付

在做支付宝支付与微信支付时看到两家公司给的dom其中关于MD5加密的 支付宝的dom: DigestUtils.md5Hex(test).toUpperCase(); 微信的dom: private static String MD5(String sourceStr) throws UnsupportedEncodingException { String result = ""; try { MessageDigest md = MessageDigest.getInstance(

如何申请三方支付接口 微信支付 支付宝支付 网银支付 钱包支付 扫码支付等

如何申请三方支付接口 微信支付 支付宝支付 网银支付 钱包支付  扫码支付等 首先,需要提供一整套申请支付接口的资料,如下 一.企业3证加盖公司公章 二.法人手持身份证照片 三.对应企业ICP备案的交易网站域名 资料审核初步审核之后,请把支付合作协议打印出来一式二份附带企业三证打印盖章邮寄到三方支付公司进一步审核 审核通过后,进行支付接口的对接 联调 最终正式环境上线

iOS第三方支付集成——微信支付

近期笔者开发的项目中,需要用到支付宝支付和微信支付.大概一个月前,支付宝就已经集成完毕并可以正常使用.但在集成坑爹的微信支付SDK时,遇到了诸多问题,搞了将近三个星期.期间不断的跟后台同事核对代码(签名.下单),支付流程,其中的血泪艰辛,不言而喻.现笔者把集成过程中遇到的一些问题记录下来,供自己和大家参考.如果有什么不对的地方,也请大家多多指正: 吐槽完了,下面出正文. 补充说明:第一准备阶段不需要开发者负责操作,如果你是iOS开发人员,只想找到调用微信支付的代码,可直接跳过 第一准备阶段. 一

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

/*支付宝第三方支付 * *生成APP支付订单信息 * @param number uid 用户id * @param string token 用户token * @param number oid 订单id * @param string title 标题 * @param string body 商品描述 * @parma float money 金额 * @param number ordernum 订单编号 */ 支付包官方文档 https://docs.open.aliyun.com

iOS应用内支付(IAP)服务端端校验详解

IAP流程 IAP流程分为两种: 一种是直接使用Apple的服务器进行购买和验证, 另一种就是自己假设服务器进行验证.由于国内网络连接Apple服务器验证非常慢,而且也为了防止黑客伪造购买凭证,通用做法是自己架设服务器进行验证. 下面我们通过图来看看两种方式的差别: 使用Apple服务器 自己架设服务器 这里重要主要讲讲服务端这一块的校验过程因为涉及到校验合法性. 1.首先拿到客户端的支付receiptData和transaction信息 2.服务端通过receiptData通过向苹果服务器po

第三方支付之微信支付(扫码支付)

第一步:注册微信支付账户,开通扫码支付 具体流程请参照官方说明 第二步:创建Maven项目 1. 添加微信支付SDK依赖.二维码工具依赖(微信支付需要自己通过二维码工具生成支付二维码) <!-- 微信支付 --> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</ver

iOS第三方支付-微信支付

微信支付用到的文件 1.首先支持非arc 2.设置URL types 3.AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];