1.去商户平台里,给你的商户充钱,没钱是发不了红包哒! 2.微信红包需要证书支持,所以请大家到商户平台下去下载好证书后放到安全文件夹下,并且需要在配置文件中指定好证书路径!
好,接下来带来裂变红包具体功能实现代码:
step1:重复一下配置文件WxPayConf_pub.php,看过之前微信支付教程的同学应该很清楚这一块了,这里我将代码截图出来,配置好后进行下一步!

step2:下载你的证书,放到一个目录下,对应配置文件中,记得这里是绝对路径!

step3:与微信现金红包一样,我们得自己在WxPayHelper.php文件下写自己的红包支付方法,这里的主要区别就是createxm

/**
* 红包支付接口
* @author gaoyl101
*/
class Groupredpack_pub extends Wxpay_client_pub
{
var $code;//code码,用以获取openid
var $openid;//用户的openid
function __construct()
{
//设置接口链接
$this->url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendgroupredpack";
//设置curl超时时间
$this->curl_timeout = WxPayConf_pub::CURL_TIMEOUT;
}
/**
* 生成接口参数xml
*/
function createXml()
{
try
{
//检测必填参数
if($this->parameters["mch_billno"] == null)
{
throw new SDKRuntimeException("缺少发红包接口必填参数mch_billno!"."<br>");
}elseif ($this->parameters["send_name"] == null ) {
throw new SDKRuntimeException("缺少发红包接口必填参数send_name!"."<br>");
}elseif ($this->parameters["total_amount"] == null) {
throw new SDKRuntimeException("缺少发红包接口必填参数total_amount!"."<br>");
}elseif ($this->parameters["total_num"] == null) {
throw new SDKRuntimeException("缺少发红包接口必填参数total_num!"."<br>");
}elseif ($this->parameters["amt_type"] == null) {
throw new SDKRuntimeException("缺少发红包接口必填参数amt_type!"."<br>");
}elseif ($this->parameters["wishing"] == null) {
throw new SDKRuntimeException("缺少发红包接口必填参数wishing!"."<br>");
}elseif ($this->parameters["act_name"] == null) {
throw new SDKRuntimeException("缺少发红包接口必填参数act_name!"."<br>");
}elseif ($this->parameters["remark"] == null) {
throw new SDKRuntimeException("缺少发红包接口必填参数remark!"."<br>");
}
$this->parameters["wxappid"] = WxPayConf_pub::APPID;//公众账号ID
$this->parameters["mch_id"] = WxPayConf_pub::MCHID;//商户号
$this->parameters["nonce_str"] = $this->createNoncestr();//随机字符串
$this->parameters["re_openid"] = $this->openid;//用户openid
$this->parameters["sign"] = $this->getSign($this->parameters);//签名
return $this->arrayToXml($this->parameters);
}catch (SDKRuntimeException $e)
{
die($e->errorMessage());
}
}
function sendRedpack()
{
$this->postXmlSSL();
$this->result = $this->xmlToArray($this->response);
return $this->result;
}
/**
* 作用:生成可以获得code的url
*/
function createOauthUrlForCode($redirectUrl)
{
$urlObj["appid"] = WxPayConf_pub::APPID;
$urlObj["redirect_uri"] = "$redirectUrl";
$urlObj["response_type"] = "code";
$urlObj["scope"] = "snsapi_base";
$urlObj["state"] = "STATE"."#wechat_redirect";
$bizString = $this->formatBizQueryParaMap($urlObj, false);
return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;
}
/**
* 作用:生成可以获得openid的url
*/
function createOauthUrlForOpenid()
{
$urlObj["appid"] = WxPayConf_pub::APPID;
$urlObj["secret"] = WxPayConf_pub::APPSECRET;
$urlObj["code"] = $this->code;
$urlObj["grant_type"] = "authorization_code";
$bizString = $this->formatBizQueryParaMap($urlObj, false);
return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;
}
/**
* 作用:通过curl向微信提交code,以获取openid
*/
function getOpenid()
{
$url = $this->createOauthUrlForOpenid();
//初始化curl
$ch = curl_init();
//设置超时
curl_setopt($ch, CURLOP_TIMEOUT, $this->curl_timeout);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);
curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
//运行curl,结果以jason形式返回
$res = curl_exec($ch);
curl_close($ch);
//取出openid
$data = json_decode($res,true);
$this->openid = $data['openid'];
return $this->openid;
}
/**
* 作用:设置code
*/
function setCode($code_)
{
$this->code = $code_;
}
}

step4:创建控制器WxGroupRedPackController

控制器中的代码:
1.引入WxPayHelper.php类库

/**
* 初始化
*/
public function _initialize()
{
//引入WxPayPubHelper
vendor('WxPayPubHelper.WxPayPubHelper');
}

2.创建发送红包方法:sendRedpack,这个方法就是发送红包的具体功能代码!

/**
* 发送红包
*/
public function sendRedpack()
{
//调用请求接口基类
$Redpack = new \Groupredpack_pub(); //=========步骤1:网页授权获取用户openid============
//通过code获得openid
if (!isset($_GET['code']))
{
//触发微信返回code码
$reduct_uri = WEB_HOST."/index.php/Home/WxGroupRedPack/sendRedpack";
$url = $Redpack->createOauthUrlForCode($reduct_uri);
Header("Location: $url");
}else
{
//获取code码,以获取openid
$code = $_GET['code'];
$Redpack->setCode($code);
$openid = $Redpack->getOpenId();
} //商户订单号
$Redpack->setParameter('mch_billno', C('WxPayConf_pub.APPID')."static");
//商户名称
$Redpack->setParameter('send_name', "gaoyl101");
//用户openid
// $Redpack->setParameter('re_openid', $parameterValue);
//付款金额
$Redpack->setParameter('total_amount', 100);
//红包发放总人数
$Redpack->setParameter('total_num', 3);
$Redpack->setParameter('amt_type','ALL_RAND');
//红包祝福语
$Redpack->setParameter('wishing', "现金红包教程祝大家写代码快乐");
//活动名称
$Redpack->setParameter('act_name', "现金红包教程");
//备注
$Redpack->setParameter('remark', "现金红包教程祝大家写代码快乐");
//以下是非必填项目
//子商户号
// $Redpack->setParameter('sub_mch_id', $parameterValue);
// //商户logo的url
// $Redpack->setParameter('amt_list', '200|100|100'); $result = $Redpack->sendRedpack(); dump($result);
}

访问这个方法,微信就会发裂变红包啦
在这里我dump了微信发送红包之后返回的结果,下面的业务逻辑就可以根据自己的需求接下去写了,返回值的说明可以看微信红包的接口说明,在微信支付平台上有。
到这里微信红包现金红包代码已经全部结束,功能经过测试已经完成!

原文转载地址 : http://www.thinkphp.cn/code/1330.html

微信支付之jsapi:
http://www.thinkphp.cn/code/1321.html
微信支付教程扫码模式一:
http://www.thinkphp.cn/code/1322.html
微信支付教程扫码模式二:
http://www.thinkphp.cn/code/1323.html
微信支付教程刷卡支付:
http://www.thinkphp.cn/code/1324.html
微信现金红包教程:
http://www.thinkphp.cn/code/1328.html

ThinkPHP整合微信支付之发裂变红包的更多相关文章

  1. ThinkPHP 整合微信支付 扫码支付 模式二 图文教程

    这篇文章主要介绍扫码支付场景二. 目前有两种模式,模式一比模式二稍微复杂点,至于模式一与模式二的具体内容,流程,微信开发文档都有详细介绍,这里就不多说废话,接下来赶紧上教程! [title]下载SDK ...

  2. thinkphp 整合微信支付-简单粗暴

    <?php//判断是否是微信客户端--该代码只适用于手机微信端--使用方法请看最后面注释if (isset($_SERVER['HTTP_USER_AGENT']) && str ...

  3. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_1-1.SpringBoot整合微信支付开发在线教育视频站点介绍

    笔记 第一章项目介绍和前期准备 1.SpringBoot整合微信支付开发在线教育视频站点介绍     简介: 课程介绍,和小D课堂在线教育项目搭建开发 1.课程大纲介绍         2.微信支付项 ...

  4. C#开发微信门户及应用(34)--微信裂变红包

    在上篇随笔<C#开发微信门户及应用(33)--微信现金红包的封装及使用>介绍了普通现金红包的封装和使用,这种红包只能单独一次发给一个人,用户获取了红包就完成了,如果我们让用户收到红包后,可 ...

  5. thinkphp.2 thinkphp5微信支付 微信公众号支付 thinkphp 微信扫码支付 thinkphp 微信企业付款5

    前面已经跑通了微信支付的流程,接下来吧微信支付和微信企业付款接入到thinkphp中,版本是3.2 把微信支付类.企业付款类整合到一起放到第三方类库,这里我把微信支付帮助类和企业付款类放到同一个文件了 ...

  6. 微信支付V3 SDK Payment Spring Boot 1.0.6 发布,实现留守红包,助力抗疫

    春节将至,为防控疫情,多地政府提倡员工.外来务工者留守本地过年,并鼓励企业向员工发放"留守红包".为此,微信支付推出"春节留守红包"能力,希望可以协助有发放需求 ...

  7. 微信支付之h5方式(非微信内置浏览器中支付)

    这两天完成了公司网站手机和PC端的支付对接,就是支付宝和微信. 对接完后有所感触,我们来聊一聊,微信支付的坑,为什么这么说呢,因为我在对接完支付宝后是很愉快的,基本上在demo上稍加修改就ok了, 对 ...

  8. thinkphp整合系列之微信公众号支付

    <?phperror_reporting(E_ALL);ini_set('display_errors', '1');// 定义时区ini_set('date.timezone','Asia/S ...

  9. (实用篇)php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)

    微信入口绑定,微信事件处理,微信API全部操作包含在这些文件中.内容有:微信摇一摇接口/微信多客服接口/微信支付接口/微信红包接口/微信卡券接口/微信小店接口/JSAPI <?php class ...

随机推荐

  1. Giving Data Backup Option in Oracle Forms 6i

    Suppose you want to give the data backup option in Oracle Forms application to some client users, wh ...

  2. c语言文件复制

    #include<stdio.h> #include<stdlib.h> void main(void) { // locate ], outfile[]; gets(infi ...

  3. 使用WordPress模板搭建博客系统

    综述: 前端展示:外观--->主题. 功能模块:插件. 遇到的问题: 1:无法加载编辑器文件: 切换下不同的wordPress模板,可能缓存文件有问题. 2:注册功能:密码重设链接无效bug-- ...

  4. js实现手机号码和身份证号码校验

    <script type="text/javascript"> function checkform() { var re; var ss = document.get ...

  5. picasso-强大的Android图片下载缓存库

    编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! pica ...

  6. CPU的高速缓存存储器知识整理

    基于缓存的存储器层次结构 基于缓存的存储器层次结构行之有效,是因为较慢的存储设备比较快的存储设备更便宜,还因为程序往往展示局部性: 时间局部性:被引用过一次的存储器的位置很可能在不远的将来被再次引用. ...

  7. 读《程序员的SQL金典》[3]--表连接、子查询

    一.表连接-JOIN 1. 自连接实例 查询类型相同的订单信息. SELECT O1 .*,O2.* FROM T_Order O1 JOIN T_Order O2 ON O1 .FTypeId= O ...

  8. user-select : 保护版权内容的简单方案

    有的适合我们需要保护我们页面的内容,为了版权或者安全等原因,这个适合我们可以使用 user-select 这个CSS属性,简单易用. 嗯,这个属性不麻烦,而且也不是 CSS 3 / CSS 4 的新属 ...

  9. SpringMVC进阶

    1.springmvc(注解版本) 注解扫描 <?xml version="1.0" encoding="UTF-8"?> <beans xm ...

  10. CodeForces 688E-The Values You Can Make

    题意: 给出n,k,分别代表硬币的数量与巧克力的价格,n个整数c1,c2,...ci...cn(ci代表第i块硬币的值);你可以从n块硬币中拿出金额恰好为k的硬币数并将其中的任意两块硬币组合得到一个数 ...