文档章节

微信开发之发红包

samuel2012
 samuel2012
发布于 2015/10/23 10:56
字数 743
阅读 387
收藏 8
点赞 0
评论 0

微信开发之发红包

http://mch.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=13_5


把下面这堆xml 以post请求方式 提交到https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack

<xml>

<sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>

<mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>

<mch_id><![CDATA[888]]></mch_id>

<wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>

<send_name><![CDATA[send_name]]></send_name>

<re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>

<total_amount><![CDATA[200]]></total_amount>

<total_num><![CDATA[1]]></total_num>

<wishing><![CDATA[恭喜发财]]></wishing>

<client_ip><![CDATA[127.0.0.1]]></client_ip>

<act_name><![CDATA[新年红包]]></act_name>

<remark><![CDATA[新年红包]]></remark>

<nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str>

</xml>


注意:需要证书(证书及使用说明详见商户证书)

参见例子:function curl_post_ssl($url, $vars, $second=30,$aHeader=array())


注意:************

xml里面要处理的参数

1.nonce_str 随机字符串,不长于32位(自动生成,没难度)

2.sign 签名 (重点是这个比较复杂) 签名生成算法地址 https://pay.weixin.qq.com/wiki/doc/api/cash_coupon.php?chapter=4_3

3.mch_billno 商户订单号(每个订单号必须唯一)组成:mch_id+yyyymmdd+10位一天内不能重复的数字。接口根据商户订单号支持重入,如出现超时可再调用。(没难度)

4.各种证书是需要到微信平台下载


官方例子PHP

<?php
/*
请确保您的libcurl版本是否支持双向认证,版本高于7.20.1
*/
function curl_post_ssl($url, $vars, $second=30,$aHeader=array())
{
    $ch = curl_init();
    //超时时间
    curl_setopt($ch,CURLOPT_TIMEOUT,$second);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
    //这里设置代理,如果有的话
    //curl_setopt($ch,CURLOPT_PROXY, '10.206.30.98');
    //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
    
    //以下两种方式需选择一种
    
    //第一种方法,cert 与 key 分别属于两个.pem文件
    //默认格式为PEM,可以注释
    //curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM');
    //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/cert.pem');
    //默认格式为PEM,可以注释
    //curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM');
    //curl_setopt($ch,CURLOPT_SSLKEY,getcwd().'/private.pem');
    
    //第二种方式,两个文件合成一个.pem文件
    //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().'/all.pem');
 
    if( count($aHeader) >= 1 ){
        curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
    }
 
    curl_setopt($ch,CURLOPT_POST, 1);
    curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
    $data = curl_exec($ch);
    if($data){
        curl_close($ch);
        return $data;
    }
    else { 
        $error = curl_errno($ch);
        echo "call faild, errorCode:$error\n"; 
        curl_close($ch);
        return false;
    }
}
$data = curl_post_ssl('https://api.mch.weixin.qq.com/secapi/pay/refund', 'merchantid=1001000');
print_r($data);
以下是封装好的方法
wxHongBaoHelper
    private function fahb($weixin_openid, $price) {
        define('DS', DIRECTORY_SEPARATOR);
        /**
         * 微信配置
         */
        //商户 appid
        define('APPID', "xxxxxxxxxxxxxx");  
        define('SIGNTYPE', "sha1"); 
        //通加密串
        define('PARTNERKEY',"xxxxxxxxxxxxxx");
        //
        define('APPSERCERT', "xxxxxxxxxxxxxx");
        //商户id
        define('MCHID', "00000000000");
        
        //一定要修改
        $openid = $weixin_openid;
        
        $money = $price*100;//红包金额,单位分
        $mch_billno=MCHID.date('YmdHis').rand(1000, 9999);//订单号
        include_once('WxHongBaoHelper.php');
        $commonUtil = new CommonUtil();
        $wxHongBaoHelper = new WxHongBaoHelper();
        
        $wxHongBaoHelper->setParameter("nonce_str", $commonUtil->create_noncestr());//随机字符串,丌长于 32 位
        $wxHongBaoHelper->setParameter("mch_billno", $mch_billno);//订单号
        $wxHongBaoHelper->setParameter("mch_id", MCHID);//商户号
        $wxHongBaoHelper->setParameter("wxappid", APPID);
        $wxHongBaoHelper->setParameter("nick_name", '');//提供方名称
        $wxHongBaoHelper->setParameter("send_name", '');//红包发送者名称
        $wxHongBaoHelper->setParameter("re_openid", $openid);//相对于医脉互通的openid
        $wxHongBaoHelper->setParameter("total_amount", $money);//付款金额,单位分
        $wxHongBaoHelper->setParameter("min_value", $money);//最小红包金额,单位分
        $wxHongBaoHelper->setParameter("max_value", $money);//最大红包金额,单位分
        $wxHongBaoHelper->setParameter("total_num", 1);//红包収放总人数
        $wxHongBaoHelper->setParameter("wishing", '');//红包祝福诧
        $wxHongBaoHelper->setParameter("client_ip", 'x.x.x.x');//调用接口的机器 Ip 地址 
        $wxHongBaoHelper->setParameter("act_name", '');//活劢名称
        $wxHongBaoHelper->setParameter("remark", '');//备注信息
        
        $postXml = $wxHongBaoHelper->create_hongbao_xml();
        $url = 'https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack';
        
        $responseXml = $wxHongBaoHelper->curl_post_ssl($url, $postXml);
        $responseObj = simplexml_load_string($responseXml, 'SimpleXMLElement', LIBXML_NOCDATA);
        $arrayName = array('responseObj' => $responseObj, 'mch_billno' => $mch_billno);
        return $arrayName;
    }


© 著作权归作者所有

共有 人打赏支持
samuel2012
粉丝 6
博文 18
码字总数 5587
作品 0
广州
高级程序员
微信发红包问题 系统错误

php微信发红包,很多红包都能正常发放成功!但是有个别的红包发放失败,本地调试后,微信端返回:系统错误,请稍后使用原单号重试,请勿更换单号!再次尝试之后能发送成功!有没有遇到这样问题...

邵明遥
2017/09/20
47
0
有人实现过关注微信公众号后发红包的功能吗

有人实现过关注微信公众号后发红包的功能吗,java的,我已经捕获到用户关注事件和用openid了,就是调用发红包接口没反应,但单独调用红包接口又是可以的

御风林海
2015/09/24
1K
0
OSChina 愚人节前的更新说明(20150331)

想着大家的智商,愚人节肯定被玩得不行不行的,因此 OSC 就不玩大家了。赶在节前更新一下程序,主要包含以下几个方面的改进: 动弹增加点赞功能,客户端的点赞随后会更新 Team 全面使用 thin...

oschina
2015/03/31
3.9K
27
微信公众号开发小记——5.python微信红包

描述 有时候产品有这么一些需求,当用户满足一定条件时,给他发一定金额的红包。 微信各个服务是独立的,比较蛋疼,要用红包功能,首先你需要注册一个微信商户平台账号。 代码位置 分支pay-2...

D咄咄
2017/11/29
0
0
NutzWk 4.0.7 和 3.3.6 发布,Java 企业级开源开发框架

NutzWk 是基于Nutz的开源企业级开发框架。 v4.0.7 更新内容 update: 大部分控制类登录权限验证改为权限标识符,防止越权访问; add: 支持微信支付相关所有接口功能,并添加DEMO; ps:微信支付...

Wizzer
2017/03/25
1K
3
微信红包神设计:让人看到就想点!

     张小龙说到今年微信不会参加春节红包大战,原因一是微信作为一个工具,不应该有太多节日性的运营活动;其次微信用春节红包来带动更多人使用微信红包的使命已经完成。此举大有大侠名...

庖丁开发
2017/01/04
0
0
QQ 空间都能抢红包了,可是为什么我觉得它注定失败?

     多年前老师问丁叔:你整天低头刷空间能赚到钱么?今天丁叔终于可以理直气壮的说一句:我能。没错,前几天腾讯推出了 QQ 空间红包功能,丁叔听到这个消息是一脸懵逼,仔细想想,这事...

庖丁开发
2016/12/23
0
0
今年春节新玩法:腾讯或推出黄金红包

每每到了中国人的传统节日春节,各大科技公司便会变着花样地推出各式各样的红包,那么,在今年,各位科技大佬又准备怎样玩呢? 若曝光消息属实,那么今年腾讯就将推出“黄金红包”。顾名思义...

m7720eiosi6oa9
01/15
0
0
iOS10新特性-最简单的iMessage application开发

2016WWDC大会除了强大的Siri主要感受到iMessage更加如微信般强大到除了一般的文字、图片、表情、语音消息,还支持消息特效动画、动态涂鸦消息、类似于发红包转账的支付、推广分享链接、媒体文...

秦无炎
2016/09/22
92
0
Python这么强?红包杀手、消息撤回也可以无视,手机App辅助!

论述 标题也许有点不好理解,其实就是一款利用Python实现的可以监控微信APP内的红包与消息撤回的助手。不得不说,这确实是一款大家钟意的神器。 消息撤回是一件很让人恶心的事,毕竟人都是有...

Python燕大侠
06/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
9分钟前
0
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
10分钟前
0
0
vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
17分钟前
0
0
庆祝法国队夺冠:用Python放一场烟花秀

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。 这个有趣的小项目并不...

猫咪编程
19分钟前
0
0
SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
32分钟前
5
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
43分钟前
1
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
今天
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
40
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部