微信支付开发发货通知实例


Posted in PHP onJuly 12, 2016

一、发货通知

为了更好地跟踪订单的情况,需要第三方在收到最终支付通知之后,调用发货通知API告知微信后台该订单的发货状态。

发货时间限制:虚拟、服务类24小时内,实物类72小时内。

请在收到支付通知后,按时发货,并使用发货通知接口将相关信息同步到微信后台。若平台在规定时间内没有收到,将视作发货超时处理。

发货通知API的URL为:

https://api.weixin.qq.com/pay/delivernotify?access_token=xxxxxx

URL中的参数只包含目前微信公众平台凭证access_token,而发货通知的真正的数据是放在PostData中的,

格式如下:

{
 "appid" : "wwwwb4f85f3a797777",
 "openid" : "oX99MDgNcgwnz3zFN3DNmo8uwa-w",
 "transid" : "111112222233333",
 "out_trade_no" : "555666uuu",
 "deliver_timestamp" : "1369745073",
 "deliver_status" : "1",
 "deliver_msg" : "ok",
 "app_signature" : "53cca9d47b883bd4a5c85a9300df3da0cb48565c",
 "sign_method" : "sha1"
}

上述内容参数说明如下表所示:

参数 说明
appid 公众平台账户的AppId;
openid 贩买用户的OpenId,这个已经放在最终支付结果通知的PostData里了;
transid 交易单号;
out_trade_no 第三方订单号;
deliver_timestamp 发货时间戳,这里指的是Linux时间戳;
deliver_status 发货状态,1表明成功,0表明失败,失败时需要在deliver_msg填上失败原因;
deliver_msg 发货状态信息,失败时可以填上UTF8编码的错诨提示信息,比如“该商品已退款”;
app_signature 根据支付签名(paySign)生成方法中所讲的签名方式生成的,参加签名字段为:appid、appkey、openid、transid、out_trade_no、deliver_timestamp、deliver_status、deliver_msg;
sign_method 签名方法(不计入签名生成);

微信公众平台在校验ok之后,会返回数据表明是否通知成功,例如:{"errcode":0,"errmsg":"ok"}如果有异常,会在errcode和errmsg描述出来,如果成功errcode就为0。

二、程序实现

程序中的一些参数来自本博客前面的微信支付开发数据。读者请参照运行

<?php

 include_once("WxPayHelper.php");

 //1. 获取access token
 $appid = "wx0000000000000000";
 $appsecret = "e76050733ce76050733ce76050733cdd";
 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
 $result = https_request($url);
 $jsoninfo = json_decode($result, true);
 $access_token = $jsoninfo["access_token"];

 //2.准备参数
 $deliver_timestamp = time();
 //2.1构造最麻烦的app_signature
 $obj['appid'] = $appid;
 $obj['appkey'] = "8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6kxCRvdJENpWpw8mruTNOGeX8OVUlIYxIyw6k";
 $obj['openid'] = "o0pk9uIVnlY-fJkzFKEbQ6LJ4cFc";
 $obj['transid'] = "1218614901201405273313473135";
 $obj['out_trade_no'] = "JfuKdiBig4zZnE4n";
 $obj['deliver_timestamp'] = $deliver_timestamp;
 $obj['deliver_status'] = "1";
 $obj['deliver_msg'] = "ok";

 $WxPayHelper = new WxPayHelper();
 //get_biz_sign函数受保护,需要先取消一下,否则会报错
 $app_signature = $WxPayHelper->get_biz_sign($obj);

 //3. 将构造的json提交给微信服务器,查询
 $jsonmenu = '
 {
 "appid" : "'.$obj['appid'].'",
 "openid" : "'.$obj['openid'].'",
 "transid" : "'.$obj['transid'].'",
 "out_trade_no" : "'.$obj['out_trade_no'].'",
 "deliver_timestamp" : "'.$deliver_timestamp.'",
 "deliver_status" : "'.$obj['deliver_status'].'",
 "deliver_msg" : "'.$obj['deliver_msg'].'",
 "app_signature" : "'.$app_signature.'",
 "sign_method" : "sha1"
 }';



 $url = "https://api.weixin.qq.com/pay/delivernotify?access_token=".$access_token;
 $result = https_request($url, $jsonmenu);
 var_dump($result);

 function https_request($url, $data = null){
 $curl = curl_init();
 curl_setopt($curl, CURLOPT_URL, $url);
 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
 if (!empty($data)){
 curl_setopt($curl, CURLOPT_POST, 1);
 curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
 }
 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 $output = curl_exec($curl);
 curl_close($curl);
 return $output;
 }

运行后返回结果

string(27) "{"errcode":0,"errmsg":"ok"}"

以上就是对开发微信支付发货通知的资料整理,希望能帮到开发微支付的朋友。

PHP 相关文章推荐
PHP中文汉字验证码
Apr 08 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
用php解析html的实现代码
Aug 08 PHP
用PHP实现小写金额转换大写金额的代码(精确到分)
Jan 10 PHP
数组与类使用PHP的可变变量名需要的注意的问题
Jun 20 PHP
PHP中的一些常用函数收集
May 26 PHP
通过Email发送PHP错误的方法
Jul 20 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
php正则提取html图片(img)src地址与任意属性的方法
Feb 08 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
May 11 PHP
在PHP中输出JS语句以及乱码问题的解决方案
Feb 13 PHP
thinkphp中的url跳转用法分析
Jul 12 #PHP
微信支付开发订单查询实例
Jul 12 #PHP
php基于mcrypt_encrypt和mcrypt_decrypt实现字符串加密解密的方法
Jul 12 #PHP
PHP简单实现DES加密解密的方法
Jul 12 #PHP
微信支付开发交易通知实例
Jul 12 #PHP
php实现的debug log日志操作类实例
Jul 12 #PHP
PHP数据库表操作的封装类及用法实例详解
Jul 12 #PHP
You might like
PHP实现伪静态方法汇总
2016/01/13 PHP
PHP面向对象自动加载机制原理与用法分析
2016/10/14 PHP
MAC下通过改apache配置文件切换php多版本的方法
2017/04/26 PHP
ThinkPHP实现的rsa非对称加密类示例
2018/05/29 PHP
告诉大家什么是JSON
2008/06/10 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
2014/02/22 Javascript
JS使用oumousemove和oumouseout动态改变图片显示的方法
2015/03/31 Javascript
ichart.js绘制虚线、平均分虚线效果的实现代码
2016/05/05 Javascript
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
在点击div中的p时,如何阻止事件冒泡
2017/02/07 Javascript
js 调用百度分享功能
2017/02/27 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
angular 数据绑定之[]和{{}}的区别
2018/09/25 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
[57:16]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS VG第二场
2014/05/26 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python中最大最小赋值小技巧(分享)
2017/12/23 Python
Python列表切片操作实例总结
2019/02/19 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
浅谈TensorFlow之稀疏张量表示
2020/06/30 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
phpquery中文手册
2021/03/18 PHP
酒店实习个人鉴定
2013/12/07 职场文书
大学自我评价
2014/02/12 职场文书
四群教育工作实施方案
2014/03/26 职场文书
班组建设经验交流材料
2014/05/12 职场文书
党的群众路线教育实践活动查摆问题及整改措施
2014/10/10 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
后勤工作个人总结
2015/02/28 职场文书
求职信格式范文
2015/03/19 职场文书
小学校长开学致辞
2015/07/29 职场文书