“亲,来一个”使用Yii2实现微信发红包解决方法 - EasyWechat版本

话说上一篇咱们讲了“企业付款到零钱”的实现方案(传送门),有人确定要说,直接打款是否是太不友好了,过个年节的你公司就不能给每人发个红包啥的么?php

放心好啦,微信支付一样提供了发红包的接口,如今北哥就给你讲讲如何将发红包的功能归入到我大Yii2旗下。html

先说下本文会涉及的知识点web

  • Yii2 Framework
  • EasyWeChat
  • 微信红包接口

这个发红包功能初期被不少三级分销和微商系统使用,如今被禁止的很厉害,不过若是利用好了,对于公众号的推广仍是至关至关的。segmentfault

另外这也一个须要开通的功能😟😟😟,进入到微信支付平台。api

先开通

对于经过此模块产生的红包,均会经过此商户关联的公众号推送给客户。安全

一个疑问

你问:可是若是我没有关注公众帐号那?微信

我答:那你同样能够收到,不过不是公众号推送的,而是微信本身的服务通知推送的,反正关不关注钱💰都收到了。给你看看流程图yii2

没有关注对应公众号收红包流程

下面的情景均为已关注公众号后的收红包状况。app

准备工做

微信支付的发红包功能也分为支付后台直接发放和经过接口方法,这里讲接口方法。(直接发放传送门微信公众平台

企业付款到零钱同样,发红包也是一个商户将本身余额的钱拿出来,所以在配置上不少雷同。

一样须要配置3个参数和2个证书文件。

  • appId & mchid & key (参数能够在公众号后台找到)
  • cert & key 证书 (微信支付平台 ➭ 帐户中心 ➭ API安全 ➭ 下载证书)
  • 商户余额必须有钱

这些配置和企业付款到零钱如出一辙~~~~

开始编码

微信接口发红包有两种

  • 普通红包
  • 裂变红包

为避免重复造轮子,在本文咱们依然使用EasyWeChat来实现它们。

不管是什么形式的红包,配置参数是必需要的,和企业付款到零钱同样。咱们配置yii2的 config/web.php

// 配置文件conf/params.php
return [
    'WECHAT'=>[
        /** * Debug 模式,bool 值:true/false * * 当值为 false 时,全部的日志都不会记录 */
        'debug'  => true,

        /** * 帐号基本信息,请从微信公众平台/开放平台获取 */
        'app_id'  => '必需要',        // AppID
        'secret'  => '不是必须的',        // AppSecret
        'token'   => '不是必须的',        // Token
        'aes_key' => '',
        ...

        'payment' => [
            'merchant_id'        => '必需要',
            'key'                => '必需要',
            'cert_path'          => 'path/to/your/cert.pem'//必须
            'key_path'           => 'path/to/your/key'//必须
        ],
    ],
];复制代码

发普通红包

这个比较简单,就是直接给一个openid发一个固定金额的红包,先看效果图吧。

发普通红包

// 发红包的action
namesapce app\controllers;

use yii\web\Controller;
use EasyWeChat\Foundation\Application;
use Yii;

class UserController extends Controller {
    public function actionRed($id,$money)){
        $user = User::findOne($id);

        // 配置支付参数
        $conf = Yii::$app->params['WECHAT'];        
        $wxApp = new Application($config);
        $luckyMoney = $wxApp->lucky_money;

        $luckyMoneyData = [
            'mch_billno'       => str_random(16),
            'send_name'        => '红包发送者名称',
            're_openid'        => $user->open_id,
            'total_num'        => 1,  //固定为1,可不传
            'total_amount'     => $money*100,  //单位为分,不小于100
            'wishing'          => '祝福语',
            'act_name'           => '活动名称',
            'remark'           => $remark,
        ];
        $result = $luckyMoney->sendNormal($luckyMoneyData);
    }
}复制代码

这样微信就将红包发了指定openId的会员。

发裂变红包

就是说我先将一组红包(N个)发给了小明,而后小明领取一个,而且他有权利将剩余的N-1个红包发给他的朋友。

聚变红包

你看到了,图1的人收到后能够转发给好友,他的朋友图2收到红包领取后,可是图2并无转发好友的功能,因此叫裂变,不然就是聚变了。

看看代码实现

// 发红包的action
namesapce app\controllers;

use yii\web\Controller;
use EasyWeChat\Foundation\Application;
use Yii;

class UserController extends Controller {
    public function actionRed($id,$money)){
        $user = User::findOne($id);

        // 配置支付参数
        $conf = Yii::$app->params['WECHAT'];        
        $wxApp = new Application($config);
        $luckyMoney = $wxApp->lucky_money;

        $luckyMoneyData = [
            'mch_billno'       => str_random(16),
            'send_name'        => '红包发送者名称',
            're_openid'        => $user->open_id,
            'total_num'        => 3,  
            'total_amount'     => $money*100,  //单位为分,不小于300
            'wishing'          => '祝福语',
            'act_name'           => '活动名称',
            'remark'           => $remark,
            'amt_type'         => 'ALL_RAND',  //可不传
        ];
        $result = $luckyMoney->sendGroup($luckyMoneyData);
    }
}复制代码

总结下

上面就是经过微信支付的接口来发红包,固然这也有不少限制,好比天天的限额,包括上面的代码我只写了必填项,还有哪些元素的,望诸君自行查看文档,字段都是同样的。

另外就是红包结果返回和查询红包记录的实现也相对比较简单,再也不重复,本文目的是顺出发红包的流程以及一些关键点的预防(好比没有关注公众号怎么办,好比什么是裂变等)

接口发红包官方接口链接:pay.weixin.qq.com/wiki/doc/ap…

还有一个好消息,北哥在segmentfault上下周二(6月27)有直播,主讲yii2和微信支付,掘金社区初来驾到,特给咱社区留10个免费码,对yii2集成微信支付不太明白的兄弟能够用下,就不用10.24元的直播费了。

地址 segmentfault.com/l/150000000…

(完)

相关文章
相关标签/搜索