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


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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
第4章 数据处理-php正则表达式-郑阿奇(续)
Jul 04 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
Jan 12 PHP
PHP中is_file不能替代file_exists的理由
Mar 04 PHP
PHP加Nginx实现动态裁剪图片方案
Mar 10 PHP
解决php表单重复提交实现方法
Sep 29 PHP
php实现网站留言板功能
Nov 04 PHP
PHP验证码生成原理和实现
Jan 24 PHP
php中strtotime函数性能分析
Nov 20 PHP
PHP实现下载远程图片保存到本地的方法
Jun 19 PHP
php简单中奖算法(实例)
Aug 15 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_MySQL教程-第一天
2007/03/18 PHP
PHP接收json 并将接收数据插入数据库的实现代码
2015/12/01 PHP
Yii1.1中通过Sql查询进行的分页操作方法
2017/03/16 PHP
Javascript 继承机制实例
2009/08/12 Javascript
最佳的addEvent事件绑定是怎样诞生的
2011/10/24 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
JavaScript实现仿网易通行证表单验证
2015/05/25 Javascript
JavaScript获取对象在页面中位置坐标的方法
2016/02/03 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
vue中添加mp3音频文件的方法
2018/03/02 Javascript
JavaScript设计模式之责任链模式实例分析
2019/01/16 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
JS实现获取当前所在周的周六、周日示例分析
2019/05/11 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
Ant Design Pro 下实现文件下载的实现代码
2019/12/03 Javascript
vue跳转页面的几种方法(推荐)
2020/03/26 Javascript
vue 动态组件(component :is) 和 dom元素限制(is)用法说明
2020/09/04 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
深入解析Python中的lambda表达式的用法
2015/08/28 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python实现识别图片内容的方法分析
2018/07/11 Python
NumPy 数学函数及代数运算的实现代码
2018/07/18 Python
Opencv+Python 色彩通道拆分及合并的示例
2018/12/08 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
纽约服装和生活方式品牌:Saturdays NYC
2017/08/13 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
司机岗位职责
2013/11/15 职场文书
师说教学反思
2014/02/07 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
农村婚庆主持词
2015/06/29 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
Canvas绘制像素风图片的示例代码
2021/09/25 HTML / CSS
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android