使用Yii2實現微信發紅包解決方法 - EasyWechat版本

放心好啦,微信支付同樣提供了發紅包的接口,現在北哥就給你講講如何將發紅包的功能納入到我大Yii2旗下。

先說下本文會涉及的知識點

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

這個發紅包功能初期被很多三級分銷和微商系統使用,現在被禁止的很厲害,不過如果利用好了,對於公衆號的推廣還是相當相當的。

另外這也一個需要開通的功能,進入到微信支付平臺。

先開通

對於通過此模塊產生的紅包,均會通過此商戶關聯的公衆號推送給客戶。

一個疑問

你問:但是如果我沒有關注公衆賬號那?

我答:那你一樣可以收到,不過不是公衆號推送的,而是微信自己的服務通知推送的,反正關不關注錢都收到了。給你看看流程圖

沒有關注對應公衆號收紅包流程

下面的情景均爲已關注公衆號後的收紅包情況。

準備工作

微信支付的發紅包功能也分爲支付後臺直接發放和通過接口方法,這裏講接口方法。(直接發放傳送門

企業付款到零錢一樣,發紅包也是一個商戶將自己餘額的錢拿出來,因此在配置上很多雷同。

同樣需要配置_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);
    }
}

總結下

上面就是通過微信支付的接口來發紅包,當然這也有很多限制,比如每天的限額,包括上面的代碼我只寫了必填項,還有哪些元素的,望諸君自行查看文檔,字段都是一樣的。

另外就是紅包結果返回和查詢紅包記錄的實現也相對比較簡單,不再重複,本文目的是順出發紅包的流程以及一些關鍵點的預防(比如沒有關注公衆號怎麼辦,比如什麼是裂變等)

接口發紅包官方接口連接:https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_1

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章