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


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 相关文章推荐
第五节--克隆
Nov 16 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
比较时间段一与时间段二是否有交集的php函数
May 31 PHP
PHP类的静态(static)方法和静态(static)变量使用介绍
Feb 19 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
ucenter通信原理分析
Jan 09 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
基于Laravel实现的用户动态模块开发
Sep 21 PHP
php表单处理操作
Nov 16 PHP
php创建类并调用的实例方法
Sep 25 PHP
PHP7 参数处理机制修改
Mar 09 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
星际玩家的三大定律
2020/03/04 星际争霸
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
PHP配置ZendOpcache插件加速
2019/02/14 PHP
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
JS区分浏览器页面是刷新还是关闭
2016/04/17 Javascript
jquery实现全选功能效果的实现代码
2016/05/05 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
jQuery上传多张图片带进度条样式(DEMO)
2017/03/02 Javascript
bootstrap可编辑下拉框jquery.editable-select
2017/10/12 jQuery
vue项目中使用vue-i18n报错的解决方法
2019/01/13 Javascript
jQuery使用hide()、toggle()函数实现相机品牌展示隐藏功能
2021/01/29 jQuery
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
利用ctypes提高Python的执行速度
2016/09/09 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
Python实现网站表单提交和模板
2019/01/15 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
Django表单提交后实现获取相同name的不同value值
2020/05/14 Python
利于python脚本编写可视化nmap和masscan的方法
2020/12/29 Python
新加坡网上花店:FlowerAdvisor新加坡
2018/10/05 全球购物
澳大利亚天然护肤品、化妆品和健康产品一站式商店:Nourished Life
2018/12/02 全球购物
Beach Bunny Swimwear官网:设计师泳装和性感比基尼
2019/03/13 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
汽车运用工程系毕业生自荐信
2013/12/27 职场文书
会计大学生职业生涯规划书范文
2014/01/13 职场文书
党员自我批评与反省材料
2014/02/10 职场文书
企业总经理岗位职责
2014/02/13 职场文书
建筑工程专业大学生求职信
2014/04/23 职场文书
环境日宣传活动总结
2014/07/09 职场文书
银行求职信怎么写
2019/06/20 职场文书
浅谈Python数学建模之整数规划
2021/06/23 Python
《雀魂PONG☆》4月1日播出 PV角色设定情报
2022/03/20 日漫
python装饰器代码解析
2022/03/23 Python