话说上一篇我们讲了“企业付款到零钱”的实现方案(传送门),有人肯定要说,直接打款是不是太不友好了,过个年节的你公司就不能给每人发个红包啥的么?
放心好啦,微信支付同样提供了发红包的接口,现在北哥就给你讲讲如何将发红包的功能纳入到我大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/wik...
(完)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。