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


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 相关文章推荐
实用函数2
Nov 08 PHP
php 伪造本地文件包含漏洞的代码
Nov 03 PHP
使用PHP编写的SVN类
Jul 18 PHP
PHP+ajaxfileupload+jcrop插件完美实现头像上传剪裁
Jun 09 PHP
PHP登录环节防止sql注入的方法浅析
Jun 30 PHP
php中ob_get_length缓冲与获取缓冲长度实例
Nov 20 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
May 18 PHP
PHP处理二进制数据的实现方法
Jun 13 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 PHP
php文件上传原理与实现方法详解
Dec 20 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中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
PHP 增加了对 .ZIP 文件的读取功能
2006/10/09 PHP
一个程序下载的管理程序(四)
2006/10/09 PHP
php array_merge下进行数组合并的代码
2008/07/22 PHP
php截取中文字符串函数实例
2015/02/23 PHP
微信自定义菜单的处理开发示例
2015/04/16 PHP
PHPCMS2008广告模板SQL注入漏洞修复
2016/10/11 PHP
PHP7 参数处理机制修改
2021/03/09 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
分享20多个很棒的jQuery 文件上传插件或教程
2011/09/04 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
ionic实现带字的toggle滑动组件
2016/08/27 Javascript
String字符串截取的四种方式总结
2016/11/28 Javascript
jQuery实现选项卡功能(两种方法)
2017/03/08 Javascript
vue2中,根据list的id进入对应的详情页并修改title方法
2018/08/24 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
matplotlib简介,安装和简单实例代码
2017/12/26 Python
Python实现可获取网易页面所有文本信息的网易网络爬虫功能示例
2018/01/15 Python
在VS Code上搭建Python开发环境的方法
2018/04/06 Python
Django 忘记管理员或忘记管理员密码 重设登录密码的方法
2018/05/30 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Python Excel处理库openpyxl使用详解
2019/05/09 Python
Django中celery执行任务结果的保存方法
2019/07/12 Python
Python可以实现栈的结构吗
2020/05/27 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
《母亲的恩情》教学反思
2014/02/13 职场文书
开业典礼主持词
2014/03/21 职场文书
学校综治宣传月活动总结
2014/07/02 职场文书
售房协议书
2014/08/19 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
Python深度学习之Pytorch初步使用
2021/05/20 Python
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS