Skip to content

Commit b0d5a9b

Browse files
committed
发红包
1 parent ddca309 commit b0d5a9b

File tree

4 files changed

+85
-15
lines changed

4 files changed

+85
-15
lines changed

docs/doc.adoc

+26
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,32 @@ if err != nil {
405405

406406
=== 账单
407407

408+
=== 发红包
409+
410+
前提条件:发红包前,你必须在商户平台中充值
411+
412+
==== 1. 获得接口
413+
414+
[source,go]
415+
----
416+
417+
//商户平台接口
418+
mch , err := wc.MchMgr()
419+
if err != nil {
420+
return
421+
}
422+
payTool := mch.GetPayTool()
423+
424+
----
425+
426+
==== 2. RedPackInput
427+
var input = paytool.RedPackInput{
428+
ToOpenID:""
429+
}
430+
431+
432+
==== 3. SendRedPack
433+
408434

409435
[[open,open]]
410436
== 开放平台

docs/doc.html

+33-1
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,7 @@ <h1>GoWechat使用文档</h1>
471471
<li><a href="#_订单">订单</a></li>
472472
<li><a href="#_退款">退款</a></li>
473473
<li><a href="#_账单">账单</a></li>
474+
<li><a href="#_发红包">发红包</a></li>
474475
</ul>
475476
</li>
476477
<li><a href="#open">开放平台</a></li>
@@ -1032,6 +1033,37 @@ <h3 id="_退款">退款</h3>
10321033
<div class="sect2">
10331034
<h3 id="_账单">账单</h3>
10341035

1036+
</div>
1037+
<div class="sect2">
1038+
<h3 id="_发红包">发红包</h3>
1039+
<div class="paragraph">
1040+
<p>前提条件:发红包前,你必须在商户平台中充值</p>
1041+
</div>
1042+
<div class="sect3">
1043+
<h4 id="_1_获得接口">1. 获得接口</h4>
1044+
<div class="listingblock">
1045+
<div class="content">
1046+
<pre class="highlight"><code class="language-go" data-lang="go">//商户平台接口
1047+
mch , err := wc.MchMgr()
1048+
if err != nil {
1049+
return
1050+
}
1051+
payTool := mch.GetPayTool()</code></pre>
1052+
</div>
1053+
</div>
1054+
</div>
1055+
<div class="sect3">
1056+
<h4 id="_2_redpackinput">2. RedPackInput</h4>
1057+
<div class="paragraph">
1058+
<p>var input = paytool.RedPackInput{
1059+
ToOpenID:""
1060+
}</p>
1061+
</div>
1062+
</div>
1063+
<div class="sect3">
1064+
<h4 id="_3_sendredpack">3. SendRedPack</h4>
1065+
1066+
</div>
10351067
</div>
10361068
</div>
10371069
</div>
@@ -1062,7 +1094,7 @@ <h2 id="code">贡献代码</h2>
10621094
</div>
10631095
<div id="footer">
10641096
<div id="footer-text">
1065-
Last updated 2017-12-25 16:52:30 CST
1097+
Last updated 2018-01-25 20:56:27 CST
10661098
</div>
10671099
</div>
10681100
</body>

mch/paytool/cash_coupon.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func NewPayTool(context *wxcontext.Context) *PayTool {
1717
return payT
1818
}
1919

20-
//SendRedPack 发现金红包
21-
func (c *PayTool) SendRedPack(req map[string]string) (resp map[string]string, err error) {
20+
//SendRedPackRaw 发现金红包
21+
func (c *PayTool) SendRedPackRaw(req map[string]string) (resp map[string]string, err error) {
2222
return c.PostXML("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack", req, true)
2323
}

mch/paytool/redpack.go

+24-12
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package pay
1+
package paytool
22

33
import (
44
"errors"
@@ -11,6 +11,10 @@ import (
1111
)
1212

1313
//官方文档: https://pay.weixin.qq.com/wiki/doc/api/tools/cash_coupon.php?chapter=13_4&index=3
14+
var (
15+
//ErrNoEnoughMoney 商户平台上的余额不足,给用户发不了红包
16+
ErrNoEnoughMoney = errors.New("No enough money")
17+
)
1418

1519
const (
1620
//SceneIDPromotion 商品促销
@@ -28,8 +32,8 @@ const (
2832
//SceneIDAgentBonous 渠道分润
2933
SceneIDAgentBonous = "PRODUCT_5"
3034

31-
//SceneIDAgentInsurance 保险回馈
32-
SceneIDAgentInsurance = "PRODUCT_6"
35+
//SceneIDInsurance 保险回馈
36+
SceneIDInsurance = "PRODUCT_6"
3337

3438
//SceneIDLottery 彩票派奖
3539
SceneIDLottery = "PRODUCT_7"
@@ -54,13 +58,14 @@ type RedPackInput struct {
5458
SceneID string
5559
}
5660

61+
//Check check input
5762
func (m *RedPackInput) Check() (isGood bool, err error) {
58-
if input.ToOpenID == "" || input.MoneyFen == 0 || input.SendName == "" || input.Wishing == "" || input.ActName == "" || input.Remark == "" || input.IP == "" {
63+
if m.ToOpenID == "" || m.MoneyFen == 0 || m.SendName == "" || m.Wishing == "" || m.ActName == "" || m.Remark == "" || m.IP == "" {
5964
err = fmt.Errorf("%s", "Input有必填项没有值")
6065
return
6166
}
6267

63-
if input.MoneyFen >= 200*100 && input.SceneID == "" {
68+
if m.MoneyFen >= 200*100 && m.SceneID == "" {
6469
err = fmt.Errorf("%s", "大于200元的红包,必须设置SceneID")
6570
return
6671
}
@@ -93,31 +98,38 @@ func (c *PayTool) SendRedPack(input RedPackInput) (isSuccess bool, err error) {
9398
signMap["remark"] = input.Remark
9499
signMap["sign"] = base.Sign(signMap, c.MchAPIKey, nil)
95100

96-
respMap, err := c.SendRedPack(signMap)
101+
respMap, err := c.SendRedPackRaw(signMap)
97102
if err != nil {
98103
return false, err
99104
}
100105

101-
result_code, ok := respMap["result_code"]
106+
resultCode, ok := respMap["result_code"]
102107
if !ok {
103108
err = errors.New("no result_code")
104109
return false, err
105110
}
106111

107-
if result_code != "SUCCESS" {
108-
err = errors.New("result code is not success")
112+
if resultCode != "SUCCESS" {
113+
returnMsg, _ := respMap["return_msg"]
114+
errMsg, _ := respMap["err_code_des"]
115+
errCode, _ := respMap["err_code"]
116+
117+
if errCode == "NOTENOUGH" {
118+
return false, ErrNoEnoughMoney
119+
}
120+
121+
err = fmt.Errorf("Err:%s return_msg:%s err_code:%s err_code_des:%s", "result code is not success", returnMsg, errCode, errMsg)
109122
return false, err
110123
}
111124

112-
mch_billno, ok := respMap["mch_billno"]
125+
mchBillNo, ok := respMap["mch_billno"]
113126
if !ok {
114127
err = errors.New("no mch_billno")
115128
return false, err
116129
}
117130

118-
if billno != mch_billno {
131+
if billno != mchBillNo {
119132
err = errors.New("billno is not correct")
120-
beego.Error(err)
121133
return false, err
122134
}
123135

0 commit comments

Comments
 (0)