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


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 相关文章推荐
用Flash图形化数据(一)
Oct 09 PHP
php数组函数序列之array_keys() - 获取数组键名
Oct 30 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
PHP学习笔记之php文件操作
Jun 03 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
php实现查询功能(数据访问)
May 23 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
PHP使用SMTP邮件服务器发送邮件示例
Aug 28 PHP
解决laravel 表单提交-POST 异常的问题
Oct 15 PHP
确保Laravel网站不会被嵌入到其他站点中的方法
Oct 18 PHP
TP5框架简单登录功能实现方法示例
Oct 31 PHP
laravel实现图片上传预览,及编辑时可更换图片,并实时变化的例子
Nov 14 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
支持oicq头像的留言簿(一)
2006/10/09 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
JQuery操作表格(隔行着色,高亮显示,筛选数据)
2012/02/23 Javascript
JavaScript 函数replace深入了解
2013/03/14 Javascript
NodeJS与Mysql的交互示例代码
2013/08/18 NodeJs
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
jQuery实现TAB选项卡切换特效简单演示
2016/03/04 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
jQuery+PHP实现上传裁剪图片
2020/06/29 jQuery
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
[51:27]LGD vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python 删除非空文件夹的实例
2018/04/26 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
python Kmeans算法原理深入解析
2019/08/23 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
德国旅游网站:weg.de
2018/06/03 全球购物
计算机网络专业推荐信
2013/11/24 职场文书
高职教师岗位职责
2013/12/24 职场文书
美术教师自我鉴定
2014/02/12 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
实用的简历自我评价
2014/03/06 职场文书
一年级学生评语大全
2014/04/21 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
写给纪委的违纪检讨书
2015/05/05 职场文书
退伍军人感言
2015/08/01 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Tomcat弱口令复现及利用
2022/05/06 Servers
mysql 排序失效
2022/05/20 MySQL
CSS 鼠标点击拖拽效果的实现代码
2022/12/24 HTML / CSS