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


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 相关文章推荐
最省空间的计数器
Oct 09 PHP
mysql 字段类型说明
Apr 27 PHP
一道关于php变量引用的面试题
Aug 08 PHP
php随机输出名人名言的代码
Oct 07 PHP
PHP以mysqli方式连接类完整代码实例
Jul 15 PHP
PHP进程同步代码实例
Feb 12 PHP
64位windows系统下安装Memcache缓存
Dec 06 PHP
Yii列表定义与使用分页方法小结(3种方法)
Jul 15 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php实现根据身份证获取精准年龄
Feb 26 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抽象工厂模式(Elgg)
2010/03/21 PHP
Yii2分页的使用及其扩展方法详解
2016/05/23 PHP
PHP框架自动加载类文件原理详解
2017/06/06 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
JS 获取span标签中的值的代码 支持ie与firefox
2009/08/24 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
jquery实现的随机多彩tag标签随机颜色和字号大小效果
2014/03/27 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
基于javascript如何传递特殊字符
2015/11/30 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
解决在vue+webpack开发中出现两个或多个菜单公用一个组件问题
2017/11/28 Javascript
三分钟教你用Node做一个微信哄女友(基友)神器(面向小白)
2019/06/21 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
python字典多条件排序方法实例
2014/06/30 Python
python实现数组插入新元素的方法
2015/05/22 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
我就是这样学习Python中的列表
2019/06/02 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Keras loss函数剖析
2020/07/06 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
工厂保洁员岗位职责
2013/12/04 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
超市开店计划书
2014/04/26 职场文书
物业管理工作方案
2014/05/10 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
拖欠货款起诉状
2015/05/20 职场文书
四群教育工作总结
2015/08/10 职场文书
接收函
2019/04/22 职场文书
java解析XML详解
2021/07/09 Java/Android
Python闭包的定义和使用方法
2022/04/11 Python
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android