abei1982 2017-06-20 18:12:25 3651次浏览 0条回复 4 0 0

先说一个好消息,北哥在segmentfault上下周二(6月27)有直播,主讲yii2和微信支付,感谢这段日子大家对我文章的支持,特给咱社区10个免费码,对yii2集成微信支付不太明白的兄弟可以用下,就不用10.24元的直播费了。

免费码地址 https://segmentfault.com/l/1500000009854908?c=9e29e8a99fc92882d2feb07f727cb7a6

好了,正文开始。

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

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

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

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

这个发红包功能初期被很多三级分销和微商系统使用,现在被禁止的很厉害,不过如果利用好了,对于公众号的推广还是相当相当的。

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

Snip20170620_60.png

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

一个疑问

你问:但是如果我没有关注公众账号那?

我答:那你一样可以收到,不过不是公众号推送的,而是微信自己的服务通知推送的,反正关不关注钱都收到了。给你看看流程图

01副本.jpg

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

准备工作

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

企业付款到零钱一样,发红包也是一个商户将自己余额的钱拿出来,因此在配置上很多雷同。

同样需要配置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发一个固定金额的红包,先看效果图吧。

WechatIMG43.jpg

// 发红包的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个红包发给他的朋友。

1111.jpg

你看到了,图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

(完)

    没有找到数据。
您需要登录后才可以回复。登录 | 立即注册