-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcoverage.html
1282 lines (1217 loc) · 239 KB
/
coverage.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
<html>
<head>
<title>Coverage Report</title>
<style type="text/css">
body { background-color: #fff; }
table {
margin-left: 10px;
border-collapse: collapse;
}
td {
background-color: #fff;
padding: 2px;
}
table.overview td {
padding-right: 20px;
}
td.percent, td.linecount { text-align: right; }
div.package, #totalcov {
color: #fff;
background-color: #375eab;
font-size: 16px;
font-weight: bold;
padding: 10px;
border-radius: 5px 5px 5px 5px;
}
div.package, #totalcov {
float: right;
right: 10px;
}
#totalcov {
top: 10px;
position: relative;
background-color: #fff;
color: #000;
border: 1px solid #375eab;
clear: both;
}
#summaryWrapper {
position: fixed;
top: 10px;
float: right;
right: 10px;
}
span.packageTotal {
float: right;
color: #000;
}
#doctitle {
background-color: #fff;
font-size: 24px;
margin-top: 20px;
margin-left: 10px;
color: #375eab;
font-weight: bold;
}
#about {
margin-left: 18px;
font-size: 10px;
}
table tr:last-child td {
font-weight: bold;
}
.functitle, .funcname {
text-align: center;
font-size: 20px;
font-weight: bold;
color: 375eab;
}
.funcname {
text-align: left;
margin-top: 20px;
margin-left: 10px;
margin-bottom: 20px;
padding: 2px 5px 5px;
background-color: #e0ebf5;
}
table.listing {
margin-left: 10px;
}
table.listing td {
padding: 0px;
font-size: 12px;
background-color: #eee;
vertical-align: top;
padding-left: 10px;
border-bottom: 1px solid #fff;
}
table.listing td:first-child {
text-align: right;
font-weight: bold;
vertical-align: center;
}
table.listing tr.miss td {
background-color: #FFBBB8;
}
table.listing tr:last-child td {
font-weight: normal;
color: #000;
}
table.listing tr:last-child td:first-child {
font-weight: bold;
}
.info {
margin-left: 10px;
}
.info code {
}
pre { margin: 1px; }
pre.cmd {
background-color: #e9e9e9;
border-radius: 5px 5px 5px 5px;
padding: 10px;
margin: 20px;
line-height: 18px;
font-size; 14px;
}
a {
text-decoration: none;
color: #375eab;
}
a:hover { text-decoration: underline; }
p { margin-left: 10px; }
</style>
</head>
<body>
<div id="doctitle">Coverage Report</div>
<div id="about">Generated on 01 Mar 16 18:15 +0800 with <a href="https://github.com/matm/gocov-html">gocov-html</a></div><div class="funcname">Report Overview</div><table class="overview">
<tr id="s_pkg_com.dy.order/orderList"><td><code><a href="#pkg_com.dy.order/orderList">com.dy.order/orderList</a></code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>88/88</code></td></tr>
<tr id="s_pkg_com.dy.order/orderModel"><td><code><a href="#pkg_com.dy.order/orderModel">com.dy.order/orderModel</a></code></td><td class="percent"><code>84.15%</code></td><td class="linecount"><code>138/164</code></td></tr>
<tr id="s_pkg_com.dy.order/orderalipay"><td><code><a href="#pkg_com.dy.order/orderalipay">com.dy.order/orderalipay</a></code></td><td class="percent"><code>88.91%</code></td><td class="linecount"><code>409/460</code></td></tr>
<tr id="s_pkg_com.dy.order/orderwxpay"><td><code><a href="#pkg_com.dy.order/orderwxpay">com.dy.order/orderwxpay</a></code></td><td class="percent"><code>88.24%</code></td><td class="linecount"><code>240/272</code></td></tr>
<tr><td><code>Report Total</code></td><td class="percent"><code>88.92%</code></td><td class="linecount"><code>875/984</code></td></tr>
</table>
<div id="pkg_com.dy.order/orderList" class="funcname">Package Overview: com.dy.order/orderList <span class="packageTotal">100.00%</span></div><p>This is a coverage report created after analysis of the <code>com.dy.order/orderList</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test com.dy.order/orderList | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_GetUsrOrder"><td><code><a href="#fn_GetUsrOrder">GetUsrOrder(...)</a></code></td><td><code>com.dy.order/orderList/order.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>50/50</code></td></tr>
<tr id="s_fn_GetOrderItems"><td><code><a href="#fn_GetOrderItems">GetOrderItems(...)</a></code></td><td><code>com.dy.order/orderList/order.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>21/21</code></td></tr>
<tr id="s_fn_DbCancelUpdate"><td><code><a href="#fn_DbCancelUpdate">DbCancelUpdate(...)</a></code></td><td><code>com.dy.order/orderList/order.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>17/17</code></td></tr>
<tr><td colspan="2"><code>com.dy.order/orderList</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>88/88</code></td></tr>
</table>
<div class="funcname" id="fn_GetUsrOrder">func GetUsrOrder</div><div class="info"><a href="#s_fn_GetUsrOrder">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderList/order.go</code>:</p></div><table class="listing">
<tr><td>47</td><td><code><pre>func GetUsrOrder(buyer, seller int64, ono string, ps, pn int64) (OrderList, error) {</pre></code></td></tr><tr><td>48</td><td><code><pre> var ord []ORDERt</pre></code></td></tr><tr><td>49</td><td><code><pre> var res OrderList</pre></code></td></tr><tr><td>50</td><td><code><pre> _sql := "select a.ono,a.buyer,a.seller,a.total_price,a.type,a.status,a.time,b.usr seller_name,c.usr buyer_name from ods_order a left join ucs_usr b on b.tid=a.seller left join ucs_usr c on c.tid=a.buyer where "</pre></code></td></tr><tr><td>51</td><td><code><pre> _pageSql := "select count(a.tid) from ods_order a where "</pre></code></td></tr><tr><td>52</td><td><code><pre> query := " 1=1 "</pre></code></td></tr><tr><td>53</td><td><code><pre> limits := ""</pre></code></td></tr><tr><td>54</td><td><code><pre> orderBy := " order by a.tid desc "</pre></code></td></tr><tr><td>55</td><td><code><pre> conn := common.DbConn()</pre></code></td></tr><tr><td>56</td><td><code><pre> if buyer != 0 {</pre></code></td></tr><tr><td>57</td><td><code><pre> query += fmt.Sprintf(" and a.buyer = %d ", buyer)</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> if seller != 0 {</pre></code></td></tr><tr><td>60</td><td><code><pre> query += fmt.Sprintf(" and a.seller = %d ", seller)</pre></code></td></tr><tr><td>61</td><td><code><pre> }</pre></code></td></tr><tr><td>62</td><td><code><pre> if ono != "" {</pre></code></td></tr><tr><td>63</td><td><code><pre> query += fmt.Sprintf(" and a.ono = '%s' ", ono)</pre></code></td></tr><tr><td>64</td><td><code><pre> }</pre></code></td></tr><tr><td>65</td><td><code><pre> if ps != 0 && pn != 0 {</pre></code></td></tr><tr><td>66</td><td><code><pre> var count int64</pre></code></td></tr><tr><td>67</td><td><code><pre> start := (pn - 1) * ps</pre></code></td></tr><tr><td>68</td><td><code><pre> limits = fmt.Sprintf(" limit %d,%d ", start, ps)</pre></code></td></tr><tr><td>69</td><td><code><pre> err := conn.QueryRow(_pageSql + query).Scan(&count)</pre></code></td></tr><tr><td>70</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>71</td><td><code><pre> return res, err</pre></code></td></tr><tr><td>72</td><td><code><pre> }</pre></code></td></tr><tr><td>73</td><td><code><pre> log.D("ps %d,pn %d,count %d", ps, pn, count)</pre></code></td></tr><tr><td>74</td><td><code><pre> res.Params.Pn = pn</pre></code></td></tr><tr><td>75</td><td><code><pre> res.Params.Ps = ps</pre></code></td></tr><tr><td>76</td><td><code><pre> res.Params.Total = count</pre></code></td></tr><tr><td>77</td><td><code><pre> }</pre></code></td></tr><tr><td>78</td><td><code><pre></pre></code></td></tr><tr><td>79</td><td><code><pre> rows, err := conn.Query(_sql + query + orderBy + limits)</pre></code></td></tr><tr><td>80</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>81</td><td><code><pre> return res, err</pre></code></td></tr><tr><td>82</td><td><code><pre> }</pre></code></td></tr><tr><td>83</td><td><code><pre> for rows.Next() {</pre></code></td></tr><tr><td>84</td><td><code><pre> var ono, types, status, time, buyerName, sellerName string</pre></code></td></tr><tr><td>85</td><td><code><pre> var buyer, seller int64</pre></code></td></tr><tr><td>86</td><td><code><pre> var total float32</pre></code></td></tr><tr><td>87</td><td><code><pre> var oneOrder ORDERt</pre></code></td></tr><tr><td>88</td><td><code><pre> rows.Scan(&ono, &buyer, &seller, &total, &types, &status, &time, &sellerName, &buyerName)</pre></code></td></tr><tr><td>89</td><td><code><pre> oneOrder.Ono = ono</pre></code></td></tr><tr><td>90</td><td><code><pre> oneOrder.Buyer = buyer</pre></code></td></tr><tr><td>91</td><td><code><pre> oneOrder.BuyerName = buyerName</pre></code></td></tr><tr><td>92</td><td><code><pre> oneOrder.SellerName = sellerName</pre></code></td></tr><tr><td>93</td><td><code><pre> oneOrder.Seller = seller</pre></code></td></tr><tr><td>94</td><td><code><pre> oneOrder.Total_price = total</pre></code></td></tr><tr><td>95</td><td><code><pre> oneOrder.Status = status</pre></code></td></tr><tr><td>96</td><td><code><pre> oneOrder.Type = types</pre></code></td></tr><tr><td>97</td><td><code><pre> oneOrder.Time = time</pre></code></td></tr><tr><td>98</td><td><code><pre> oneOrder.Items, err = GetOrderItems(ono)</pre></code></td></tr><tr><td>99</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>100</td><td><code><pre> return res, err</pre></code></td></tr><tr><td>101</td><td><code><pre> }</pre></code></td></tr><tr><td>102</td><td><code><pre> ord = append(ord, oneOrder)</pre></code></td></tr><tr><td>103</td><td><code><pre> }</pre></code></td></tr><tr><td>104</td><td><code><pre> rows.Close()</pre></code></td></tr><tr><td>105</td><td><code><pre> res.List = ord</pre></code></td></tr><tr><td>106</td><td><code><pre> return res, nil</pre></code></td></tr><tr><td>107</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_GetOrderItems">func GetOrderItems</div><div class="info"><a href="#s_fn_GetOrderItems">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderList/order.go</code>:</p></div><table class="listing">
<tr><td>109</td><td><code><pre>func GetOrderItems(ono string) ([]orderItem, error) {</pre></code></td></tr><tr><td>110</td><td><code><pre> var res []orderItem</pre></code></td></tr><tr><td>111</td><td><code><pre> conn := common.DbConn()</pre></code></td></tr><tr><td>112</td><td><code><pre> _sql := "select p_name,p_id,p_type,p_img,p_count,price from ods_order_item where ono= ?"</pre></code></td></tr><tr><td>113</td><td><code><pre> rows, err := conn.Query(_sql, ono)</pre></code></td></tr><tr><td>114</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>115</td><td><code><pre> return res, err</pre></code></td></tr><tr><td>116</td><td><code><pre> }</pre></code></td></tr><tr><td>117</td><td><code><pre> for rows.Next() {</pre></code></td></tr><tr><td>118</td><td><code><pre> var name, types, img string</pre></code></td></tr><tr><td>119</td><td><code><pre> var id, count int64</pre></code></td></tr><tr><td>120</td><td><code><pre> var price float32</pre></code></td></tr><tr><td>121</td><td><code><pre> item := orderItem{}</pre></code></td></tr><tr><td>122</td><td><code><pre> rows.Scan(&name, &id, &types, &img, &count, &price)</pre></code></td></tr><tr><td>123</td><td><code><pre> item.Name = name</pre></code></td></tr><tr><td>124</td><td><code><pre> item.Count = count</pre></code></td></tr><tr><td>125</td><td><code><pre> item.Id = id</pre></code></td></tr><tr><td>126</td><td><code><pre> item.Img = img</pre></code></td></tr><tr><td>127</td><td><code><pre> item.Type = types</pre></code></td></tr><tr><td>128</td><td><code><pre> item.Price = price</pre></code></td></tr><tr><td>129</td><td><code><pre> res = append(res, item)</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> rows.Close()</pre></code></td></tr><tr><td>132</td><td><code><pre> return res, nil</pre></code></td></tr><tr><td>133</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DbCancelUpdate">func DbCancelUpdate</div><div class="info"><a href="#s_fn_DbCancelUpdate">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderList/order.go</code>:</p></div><table class="listing">
<tr><td>135</td><td><code><pre>func DbCancelUpdate(ono string) error {</pre></code></td></tr><tr><td>136</td><td><code><pre> if ono == "" {</pre></code></td></tr><tr><td>137</td><td><code><pre> log.E("订单编号为空")</pre></code></td></tr><tr><td>138</td><td><code><pre> return fmt.Errorf("订单编号为空")</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr><td>140</td><td><code><pre> var ty string</pre></code></td></tr><tr><td>141</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>142</td><td><code><pre> err := common.DbConn().QueryRow("select status from ods_order where ono = ?", ono).Scan(&ty)</pre></code></td></tr><tr><td>143</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>144</td><td><code><pre> log.E("查询订单状态错误:%v", err.Error())</pre></code></td></tr><tr><td>145</td><td><code><pre> return err</pre></code></td></tr><tr><td>146</td><td><code><pre> }</pre></code></td></tr><tr><td>147</td><td><code><pre> if ty == "NOT_PAY" {</pre></code></td></tr><tr><td>148</td><td><code><pre> _, err := dbutil.DbUpdate(db, "UPDATE ods_order,ods_order_item,ods_record SET ods_order.status = 'INVALID',ods_order_item.status = 'INVALID',ods_record.status = 'INVALID' WHERE ods_order.ono = ? AND ods_order_item.ono = ? AND ods_record.ono = ?", ono, ono, ono)</pre></code></td></tr><tr><td>149</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>150</td><td><code><pre> log.E("更新订单状态错误:%v", err.Error())</pre></code></td></tr><tr><td>151</td><td><code><pre> return err</pre></code></td></tr><tr><td>152</td><td><code><pre> }</pre></code></td></tr><tr><td>153</td><td><code><pre> } else {</pre></code></td></tr><tr><td>154</td><td><code><pre> log.E("订单不处于可关闭状态")</pre></code></td></tr><tr><td>155</td><td><code><pre> return fmt.Errorf("订单不处于可关闭状态")</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr><tr><td>157</td><td><code><pre> return nil</pre></code></td></tr><tr><td>158</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:com.dy.order/orderList DONE:100.00
-->
<div id="pkg_com.dy.order/orderModel" class="funcname">Package Overview: com.dy.order/orderModel <span class="packageTotal">84.15%</span></div><p>This is a coverage report created after analysis of the <code>com.dy.order/orderModel</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test com.dy.order/orderModel | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_DealAliReturn"><td><code><a href="#fn_DealAliReturn">DealAliReturn(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>31/31</code></td></tr>
<tr id="s_fn_DealAliNotify"><td><code><a href="#fn_DealAliNotify">DealAliNotify(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>23/23</code></td></tr>
<tr id="s_fn_IfAlipaySuccessFail"><td><code><a href="#fn_IfAlipaySuccessFail">IfAlipaySuccessFail(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_AlipayPaySuccess"><td><code><a href="#fn_AlipayPaySuccess">AlipayPaySuccess(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>92.68%</code></td><td class="linecount"><code>38/41</code></td></tr>
<tr id="s_fn_Callback"><td><code><a href="#fn_Callback">Callback(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>27/33</code></td></tr>
<tr id="s_fn_@104:8"><td><code><a href="#fn_@104:8">@104:8(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
<tr id="s_fn_@108:8"><td><code><a href="#fn_@108:8">@108:8(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>60.00%</code></td><td class="linecount"><code>9/15</code></td></tr>
<tr id="s_fn_@74:5"><td><code><a href="#fn_@74:5">@74:5(...)</a></code></td><td><code>com.dy.order/orderModel/thdPayAbout.go</code></td><td class="percent"><code>28.57%</code></td><td class="linecount"><code>4/14</code></td></tr>
<tr><td colspan="2"><code>com.dy.order/orderModel</code></td><td class="percent"><code>84.15%</code></td><td class="linecount"><code>138/164</code></td></tr>
</table>
<div class="funcname" id="fn_DealAliReturn">func DealAliReturn</div><div class="info"><a href="#s_fn_DealAliReturn">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>196</td><td><code><pre>func DealAliReturn(r *http.Request) (callbackMsg string) {</pre></code></td></tr><tr><td>197</td><td><code><pre> trade_status := r.FormValue("trade_status")</pre></code></td></tr><tr><td>198</td><td><code><pre> out_trade_no := r.FormValue("out_trade_no")</pre></code></td></tr><tr><td>199</td><td><code><pre> buyer_email := r.FormValue("buyer_email")</pre></code></td></tr><tr><td>200</td><td><code><pre> subject := r.FormValue("subject")</pre></code></td></tr><tr><td>201</td><td><code><pre> log.D("buyer_email is : %v ", buyer_email)</pre></code></td></tr><tr><td>202</td><td><code><pre> log.D("subject is : %v ", subject)</pre></code></td></tr><tr><td>203</td><td><code><pre> log.D("trade_status is : %v ", trade_status)</pre></code></td></tr><tr><td>204</td><td><code><pre> log.D("out_trade_no is : %v ", out_trade_no)</pre></code></td></tr><tr><td>205</td><td><code><pre></pre></code></td></tr><tr><td>206</td><td><code><pre> var total_fee float64</pre></code></td></tr><tr><td>207</td><td><code><pre> fmt.Sscanf(r.FormValue("total_fee"), "%f", &total_fee)</pre></code></td></tr><tr><td>208</td><td><code><pre></pre></code></td></tr><tr><td>209</td><td><code><pre> if trade_status == "TRADE_SUCCESS" {</pre></code></td></tr><tr><td>210</td><td><code><pre> //todo : deal the order</pre></code></td></tr><tr><td>211</td><td><code><pre> log.D("trade_success in webreturn")</pre></code></td></tr><tr><td>212</td><td><code><pre> var rurl string</pre></code></td></tr><tr><td>213</td><td><code><pre> _sql := `select return_url from ods_order where ono=?`</pre></code></td></tr><tr><td>214</td><td><code><pre> errR := common.DbConn().QueryRow(_sql, out_trade_no).Scan(&rurl)</pre></code></td></tr><tr><td>215</td><td><code><pre> if errR != nil {</pre></code></td></tr><tr><td>216</td><td><code><pre> log.E("can't find return_url in order")</pre></code></td></tr><tr><td>217</td><td><code><pre> callbackMsg = "没有回调地址,请联系客服"</pre></code></td></tr><tr><td>218</td><td><code><pre> return</pre></code></td></tr><tr><td>219</td><td><code><pre> }</pre></code></td></tr><tr><td>220</td><td><code><pre> strUrl := fmt.Sprintf("location.href='%s'", rurl)</pre></code></td></tr><tr><td>221</td><td><code><pre> callbackMsg = "<html>"</pre></code></td></tr><tr><td>222</td><td><code><pre> callbackMsg += "<head>"</pre></code></td></tr><tr><td>223</td><td><code><pre> callbackMsg += "<script type='text/javascript'>"</pre></code></td></tr><tr><td>224</td><td><code><pre> callbackMsg += strUrl</pre></code></td></tr><tr><td>225</td><td><code><pre> callbackMsg += "</script>"</pre></code></td></tr><tr><td>226</td><td><code><pre> callbackMsg += "</head>"</pre></code></td></tr><tr><td>227</td><td><code><pre> callbackMsg += "<body>"</pre></code></td></tr><tr><td>228</td><td><code><pre></pre></code></td></tr><tr><td>229</td><td><code><pre> callbackMsg += "</body>"</pre></code></td></tr><tr><td>230</td><td><code><pre> callbackMsg += "</html>"</pre></code></td></tr><tr><td>231</td><td><code><pre> }</pre></code></td></tr><tr><td>232</td><td><code><pre></pre></code></td></tr><tr><td>233</td><td><code><pre> if trade_status == "TRADE_FINISHED" {</pre></code></td></tr><tr><td>234</td><td><code><pre></pre></code></td></tr><tr><td>235</td><td><code><pre> }</pre></code></td></tr><tr><td>236</td><td><code><pre> return</pre></code></td></tr><tr><td>237</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DealAliNotify">func DealAliNotify</div><div class="info"><a href="#s_fn_DealAliNotify">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>239</td><td><code><pre>func DealAliNotify(r *http.Request, pay_type string, from string) {</pre></code></td></tr><tr><td>240</td><td><code><pre></pre></code></td></tr><tr><td>241</td><td><code><pre> trade_status := r.FormValue("trade_status") //-</pre></code></td></tr><tr><td>242</td><td><code><pre> out_trade_no := r.FormValue("out_trade_no") //ono</pre></code></td></tr><tr><td>243</td><td><code><pre> buyer_email := r.FormValue("buyer_email") //-</pre></code></td></tr><tr><td>244</td><td><code><pre> subject := r.FormValue("subject") //name</pre></code></td></tr><tr><td>245</td><td><code><pre> sellerId := r.FormValue("seller_id") //targetid</pre></code></td></tr><tr><td>246</td><td><code><pre> buyerId := r.FormValue("buyer_id") //-</pre></code></td></tr><tr><td>247</td><td><code><pre> //pay_type := `ALIPAY`</pre></code></td></tr><tr><td>248</td><td><code><pre> target_type := "USER"</pre></code></td></tr><tr><td>249</td><td><code><pre> Type := "INCOMING" //PAY|INCOMING|REFUND</pre></code></td></tr><tr><td>250</td><td><code><pre> //status := "N"</pre></code></td></tr><tr><td>251</td><td><code><pre> status := "PAID" //改N->PAID</pre></code></td></tr><tr><td>252</td><td><code><pre> var total_fee float64</pre></code></td></tr><tr><td>253</td><td><code><pre> fmt.Sscanf(r.FormValue("total_fee"), "%f", &total_fee)</pre></code></td></tr><tr><td>254</td><td><code><pre></pre></code></td></tr><tr><td>255</td><td><code><pre> log.D("call from is: %v", from)</pre></code></td></tr><tr><td>256</td><td><code><pre> log.D("trade_status is : %v ", trade_status)</pre></code></td></tr><tr><td>257</td><td><code><pre> log.D("out_trade_no is : %v ", out_trade_no)</pre></code></td></tr><tr><td>258</td><td><code><pre> log.D("buyer_email is : %v ", buyer_email)</pre></code></td></tr><tr><td>259</td><td><code><pre> log.D("subject is : %v ", subject)</pre></code></td></tr><tr><td>260</td><td><code><pre> log.D("total_fee is %v ", total_fee)</pre></code></td></tr><tr><td>261</td><td><code><pre> log.D("buyerId is %v", buyerId)</pre></code></td></tr><tr><td>262</td><td><code><pre></pre></code></td></tr><tr><td>263</td><td><code><pre> //判断该笔订单是否在商户网站中已经做过处理</pre></code></td></tr><tr><td>264</td><td><code><pre> //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序</pre></code></td></tr><tr><td>265</td><td><code><pre> //如果有做过处理,不执行商户的业务程序</pre></code></td></tr><tr><td>266</td><td><code><pre></pre></code></td></tr><tr><td>267</td><td><code><pre> //注意:</pre></code></td></tr><tr><td>268</td><td><code><pre> //该种交易状态只在一种情况下出现——开通了高级即时到账,买家付款成功后。</pre></code></td></tr><tr><td>269</td><td><code><pre></pre></code></td></tr><tr><td>270</td><td><code><pre> if trade_status == "TRADE_SUCCESS" {</pre></code></td></tr><tr><td>271</td><td><code><pre> log.D("TRADE_SUCCESS,处理订单中...")</pre></code></td></tr><tr><td>272</td><td><code><pre> if bl, _ := AlipayPaySuccess(subject, Type, total_fee, pay_type, sellerId, target_type, out_trade_no, status); bl != true {</pre></code></td></tr><tr><td>273</td><td><code><pre> IfAlipaySuccessFail(subject, Type, total_fee, pay_type, sellerId, target_type, out_trade_no, status)</pre></code></td></tr><tr><td>274</td><td><code><pre> }</pre></code></td></tr><tr><td>275</td><td><code><pre> }</pre></code></td></tr><tr><td>276</td><td><code><pre></pre></code></td></tr><tr><td>277</td><td><code><pre> //判断是否已做操作</pre></code></td></tr><tr><td>278</td><td><code><pre></pre></code></td></tr><tr><td>279</td><td><code><pre> //判断该笔订单是否在商户网站中已经做过处理</pre></code></td></tr><tr><td>280</td><td><code><pre> //如果没有做过处理,根据订单号(out_trade_no)在商户网站的订单系统中查到该笔订单的详细,并执行商户的业务程序</pre></code></td></tr><tr><td>281</td><td><code><pre> //如果有做过处理,不执行商户的业务程序</pre></code></td></tr><tr><td>282</td><td><code><pre></pre></code></td></tr><tr><td>283</td><td><code><pre> //注意:</pre></code></td></tr><tr><td>284</td><td><code><pre> //1、开通了普通即时到账,买家付款成功后。</pre></code></td></tr><tr><td>285</td><td><code><pre> //该种交易状态只在两种情况下出现</pre></code></td></tr><tr><td>286</td><td><code><pre> //2、开通了高级即时到账,从该笔交易成功时间算起,过了签约时的可退款时限(如:三个月以内可退款、一年以内可退款等)后。</pre></code></td></tr><tr><td>287</td><td><code><pre></pre></code></td></tr><tr><td>288</td><td><code><pre> if trade_status == "TRADE_FINISHED" {</pre></code></td></tr><tr><td>289</td><td><code><pre></pre></code></td></tr><tr><td>290</td><td><code><pre> }</pre></code></td></tr><tr><td>291</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_IfAlipaySuccessFail">func IfAlipaySuccessFail</div><div class="info"><a href="#s_fn_IfAlipaySuccessFail">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>71</td><td><code><pre>func IfAlipaySuccessFail(name string, Type string, money float64, pay_type string, targetid string, target_type string, ono string, status string) {</pre></code></td></tr><tr><td>72</td><td><code><pre> // conn = dbMgr.DbConn()</pre></code></td></tr><tr><td>73</td><td><code><pre> log.D("数据库出错,后续处理中")</pre></code></td></tr><tr><td>74</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>75</td><td><code><pre> timer := time.NewTicker(15 * time.Second)</pre></code></td></tr><tr><td>76</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>77</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>78</td><td><code><pre> for {</pre></code></td></tr><tr><td>79</td><td><code><pre> select {</pre></code></td></tr><tr><td>80</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>81</td><td><code><pre> if i < 3 {</pre></code></td></tr><tr><td>82</td><td><code><pre> log.D("the %d times ccb fail", i)</pre></code></td></tr><tr><td>83</td><td><code><pre> i++</pre></code></td></tr><tr><td>84</td><td><code><pre> } else {</pre></code></td></tr><tr><td>85</td><td><code><pre> log.D("kill timer ali fail")</pre></code></td></tr><tr><td>86</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>87</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> if bl, _ := AlipayPaySuccess(name, Type, money, pay_type, targetid, target_type, ono, status); bl {</pre></code></td></tr><tr><td>90</td><td><code><pre> log.D("ccb success in fail")</pre></code></td></tr><tr><td>91</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>92</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>93</td><td><code><pre> }</pre></code></td></tr><tr><td>94</td><td><code><pre> }</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr><td>96</td><td><code><pre> }()</pre></code></td></tr><tr><td>97</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AlipayPaySuccess">func AlipayPaySuccess</div><div class="info"><a href="#s_fn_AlipayPaySuccess">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>102</td><td><code><pre>func AlipayPaySuccess(name string, Type string, money float64, pay_type string, targetid string, target_type string, ono string, status string) (bool, error) {</pre></code></td></tr><tr><td>103</td><td><code><pre> callback := false</pre></code></td></tr><tr><td>104</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>105</td><td><code><pre> if callback == true {</pre></code></td></tr><tr><td>106</td><td><code><pre> if bl, _ := Callback(ono); bl != true {</pre></code></td></tr><tr><td>107</td><td><code><pre> log.D("callback=false")</pre></code></td></tr><tr><td>108</td><td><code><pre> go func(ono string) {</pre></code></td></tr><tr><td>109</td><td><code><pre> log.D("回调出错,后续处理中")</pre></code></td></tr><tr><td>110</td><td><code><pre> timer := time.NewTicker(3 * time.Second)</pre></code></td></tr><tr><td>111</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>112</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>113</td><td><code><pre> for {</pre></code></td></tr><tr><td>114</td><td><code><pre> select {</pre></code></td></tr><tr><td>115</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>116</td><td><code><pre> if i >= 5 {</pre></code></td></tr><tr><td>117</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>118</td><td><code><pre> log.D("kill timer ali")</pre></code></td></tr><tr><td>119</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>120</td><td><code><pre> } else {</pre></code></td></tr><tr><td>121</td><td><code><pre> log.D("the %d times ccb", i)</pre></code></td></tr><tr><td>122</td><td><code><pre> i++</pre></code></td></tr><tr><td>123</td><td><code><pre> }</pre></code></td></tr><tr><td>124</td><td><code><pre> if bl, _ := Callback(ono); bl {</pre></code></td></tr><tr><td>125</td><td><code><pre> log.D("ccb success ")</pre></code></td></tr><tr><td>126</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>127</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre> }</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> }(ono)</pre></code></td></tr><tr><td>132</td><td><code><pre> } else {</pre></code></td></tr><tr><td>133</td><td><code><pre> log.D("callback=true")</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr><td>136</td><td><code><pre> }()</pre></code></td></tr><tr><td>137</td><td><code><pre></pre></code></td></tr><tr><td>138</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>139</td><td><code><pre> tx, _ := db.Begin()</pre></code></td></tr><tr><td>140</td><td><code><pre> var uid int64</pre></code></td></tr><tr><td>141</td><td><code><pre> var target_id int64</pre></code></td></tr><tr><td>142</td><td><code><pre> // var imoney float64</pre></code></td></tr><tr><td>143</td><td><code><pre> // var buyer int64</pre></code></td></tr><tr><td>144</td><td><code><pre> _sql := `select buyer,seller from ods_order o join ods_record r where r.ono=o.ono and r.ono =? order by r.tid asc`</pre></code></td></tr><tr><td>145</td><td><code><pre> err := tx.QueryRow(_sql, ono).Scan(&uid, &target_id)</pre></code></td></tr><tr><td>146</td><td><code><pre> //err1 := tx.QueryRow(_sql, ono).Scan(&target_id)</pre></code></td></tr><tr><td>147</td><td><code><pre> if err != nil /*|| err1 != nil*/ {</pre></code></td></tr><tr><td>148</td><td><code><pre> log.E("Query ods_record uid ,target_id error %v", err.Error())</pre></code></td></tr><tr><td>149</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>150</td><td><code><pre> return false, errors.New("Query record uid,target_id error")</pre></code></td></tr><tr><td>151</td><td><code><pre> }</pre></code></td></tr><tr><td>152</td><td><code><pre> if uid == 0 || target_id == 0 {</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>154</td><td><code><pre> return false, errors.New("uid or target not exist")</pre></code></td></tr><tr><td>155</td><td><code><pre> }</pre></code></td></tr><tr><td>156</td><td><code><pre> //integral</pre></code></td></tr><tr><td>157</td><td><code><pre> //</pre></code></td></tr><tr><td>158</td><td><code><pre></pre></code></td></tr><tr><td>159</td><td><code><pre> //buyer-->uid record</pre></code></td></tr><tr><td>160</td><td><code><pre> Type = "PAID"</pre></code></td></tr><tr><td>161</td><td><code><pre> sts := "PAID"</pre></code></td></tr><tr><td>162</td><td><code><pre> if bl, err := UpdateRecord(tx, Type, sts, uid, ono); bl != true {</pre></code></td></tr><tr><td>163</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr><td>165</td><td><code><pre> //seller-->uid record</pre></code></td></tr><tr><td>166</td><td><code><pre> Type = "INCOME"</pre></code></td></tr><tr><td>167</td><td><code><pre> if bl, err := UpdateRecord(tx, Type, sts, target_id, ono); bl != true {</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>169</td><td><code><pre> }</pre></code></td></tr><tr><td>170</td><td><code><pre></pre></code></td></tr><tr><td>171</td><td><code><pre> _sql = `update ods_order set status=? where ono =?`</pre></code></td></tr><tr><td>172</td><td><code><pre> _, err = tx.Exec(_sql, status, ono)</pre></code></td></tr><tr><td>173</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>174</td><td><code><pre> log.E("Add ods_record error %v", err.Error())</pre></code></td></tr><tr><td>175</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>176</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>177</td><td><code><pre> }</pre></code></td></tr><tr><td>178</td><td><code><pre> _sql = `update ods_order set wno=NULL where ono =?`</pre></code></td></tr><tr><td>179</td><td><code><pre> _, err = tx.Exec(_sql, ono)</pre></code></td></tr><tr><td>180</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>181</td><td><code><pre> log.E("Add ods_record error %v", err.Error())</pre></code></td></tr><tr><td>182</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>183</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>184</td><td><code><pre> }</pre></code></td></tr><tr><td>185</td><td><code><pre> err = tx.Commit()</pre></code></td></tr><tr><td>186</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>187</td><td><code><pre> log.E("AlipayPaySuccess commit error %v", err.Error())</pre></code></td></tr><tr><td>188</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>189</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>190</td><td><code><pre> }</pre></code></td></tr><tr><td>191</td><td><code><pre> callback = true</pre></code></td></tr><tr><td>192</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>193</td><td><code><pre></pre></code></td></tr><tr><td>194</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_Callback">func Callback</div><div class="info"><a href="#s_fn_Callback">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>20</td><td><code><pre>func Callback(ono string) (bl bool, err error) {</pre></code></td></tr><tr><td>21</td><td><code><pre> log.D("callback")</pre></code></td></tr><tr><td>22</td><td><code><pre> var strurl1 string</pre></code></td></tr><tr><td>23</td><td><code><pre> var strurl2 string</pre></code></td></tr><tr><td>24</td><td><code><pre></pre></code></td></tr><tr><td>25</td><td><code><pre> //strurl := fmt.Sprintf("%s%s", `http://`, conf.Rcp_host())</pre></code></td></tr><tr><td>26</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>27</td><td><code><pre> _sql := `select aval from ods_order_env where akey in (select p_from from ods_order_item where ono=?)`</pre></code></td></tr><tr><td>28</td><td><code><pre> if err := db.QueryRow(_sql, ono).Scan(&strurl1); err != nil {</pre></code></td></tr><tr><td>29</td><td><code><pre> log.E("query aval err in ods_order_env")</pre></code></td></tr><tr><td>30</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>31</td><td><code><pre> }</pre></code></td></tr><tr><td>32</td><td><code><pre> _sql = `select expand from ods_order where ono=?`</pre></code></td></tr><tr><td>33</td><td><code><pre> if err := db.QueryRow(_sql, ono).Scan(&strurl2); err != nil {</pre></code></td></tr><tr><td>34</td><td><code><pre> log.E("query aval err in ods_order")</pre></code></td></tr><tr><td>35</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>36</td><td><code><pre> }</pre></code></td></tr><tr><td>37</td><td><code><pre> strurl := strurl1 + strurl2</pre></code></td></tr><tr><td>38</td><td><code><pre> //strurl := strurl + strurl1 + strurl2</pre></code></td></tr><tr><td>39</td><td><code><pre> //Rcp_host</pre></code></td></tr><tr><td>40</td><td><code><pre></pre></code></td></tr><tr><td>41</td><td><code><pre> fmt.Printf("strurl:%s\n", strurl)</pre></code></td></tr><tr><td>42</td><td><code><pre> if strurl != "" {</pre></code></td></tr><tr><td>43</td><td><code><pre> res, err := http.Get(strurl)</pre></code></td></tr><tr><td>44</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>45</td><td><code><pre> log.E("callback:get err:%s", err.Error())</pre></code></td></tr><tr><td>46</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>47</td><td><code><pre> }</pre></code></td></tr><tr><td>48</td><td><code><pre> defer res.Body.Close()</pre></code></td></tr><tr><td>49</td><td><code><pre> got, err := ioutil.ReadAll(res.Body)</pre></code></td></tr><tr><td>50</td><td><code><pre> var cb CBStruct</pre></code></td></tr><tr><td>51</td><td><code><pre> if err := json.Unmarshal(got, &cb); err != nil {</pre></code></td></tr><tr class="miss"><td>52</td><td><code><pre> log.E("json err:%s", err.Error())</pre></code></td></tr><tr class="miss"><td>53</td><td><code><pre> return false, nil</pre></code></td></tr><tr><td>54</td><td><code><pre> }</pre></code></td></tr><tr><td>55</td><td><code><pre> log.D("cb.Code:%v,cb.Data:%v", cb.Code, cb.Data)</pre></code></td></tr><tr><td>56</td><td><code><pre> if cb.Code == int64(0) {</pre></code></td></tr><tr class="miss"><td>57</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr><td>59</td><td><code><pre> if cb.Code == int64(2) {</pre></code></td></tr><tr><td>60</td><td><code><pre> //参与了课程,可认为成功?</pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> log.D("你已经参与过这门课程")</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>63</td><td><code><pre> }</pre></code></td></tr><tr><td>64</td><td><code><pre> return false, nil</pre></code></td></tr><tr><td>65</td><td><code><pre> }</pre></code></td></tr><tr><td>66</td><td><code><pre> //如果没返回,就不管</pre></code></td></tr><tr class="miss"><td>67</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>68</td><td><code><pre> //id=40001&token=5e6248a918eb211ab85381c6499adeb8-db481955-9910-4db3-aa6c-b401f3831743</pre></code></td></tr><tr><td>69</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@104:8">func @104:8</div><div class="info"><a href="#s_fn_@104:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>104</td><td><code><pre>func() {</pre></code></td></tr><tr><td>105</td><td><code><pre> if callback == true {</pre></code></td></tr><tr><td>106</td><td><code><pre> if bl, _ := Callback(ono); bl != true {</pre></code></td></tr><tr><td>107</td><td><code><pre> log.D("callback=false")</pre></code></td></tr><tr><td>108</td><td><code><pre> go func(ono string) {</pre></code></td></tr><tr><td>109</td><td><code><pre> log.D("回调出错,后续处理中")</pre></code></td></tr><tr><td>110</td><td><code><pre> timer := time.NewTicker(3 * time.Second)</pre></code></td></tr><tr><td>111</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>112</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>113</td><td><code><pre> for {</pre></code></td></tr><tr><td>114</td><td><code><pre> select {</pre></code></td></tr><tr><td>115</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>116</td><td><code><pre> if i >= 5 {</pre></code></td></tr><tr><td>117</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>118</td><td><code><pre> log.D("kill timer ali")</pre></code></td></tr><tr><td>119</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>120</td><td><code><pre> } else {</pre></code></td></tr><tr><td>121</td><td><code><pre> log.D("the %d times ccb", i)</pre></code></td></tr><tr><td>122</td><td><code><pre> i++</pre></code></td></tr><tr><td>123</td><td><code><pre> }</pre></code></td></tr><tr><td>124</td><td><code><pre> if bl, _ := Callback(ono); bl {</pre></code></td></tr><tr><td>125</td><td><code><pre> log.D("ccb success ")</pre></code></td></tr><tr><td>126</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>127</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre> }</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> }(ono)</pre></code></td></tr><tr><td>132</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>133</td><td><code><pre> log.D("callback=true")</pre></code></td></tr><tr><td>134</td><td><code><pre> }</pre></code></td></tr><tr><td>135</td><td><code><pre> }</pre></code></td></tr><tr><td>136</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@108:8">func @108:8</div><div class="info"><a href="#s_fn_@108:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>108</td><td><code><pre>func(ono string) {</pre></code></td></tr><tr><td>109</td><td><code><pre> log.D("回调出错,后续处理中")</pre></code></td></tr><tr><td>110</td><td><code><pre> timer := time.NewTicker(3 * time.Second)</pre></code></td></tr><tr><td>111</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>112</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>113</td><td><code><pre> for {</pre></code></td></tr><tr><td>114</td><td><code><pre> select {</pre></code></td></tr><tr><td>115</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>116</td><td><code><pre> if i >= 5 {</pre></code></td></tr><tr class="miss"><td>117</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr class="miss"><td>118</td><td><code><pre> log.D("kill timer ali")</pre></code></td></tr><tr class="miss"><td>119</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>120</td><td><code><pre> } else {</pre></code></td></tr><tr><td>121</td><td><code><pre> log.D("the %d times ccb", i)</pre></code></td></tr><tr><td>122</td><td><code><pre> i++</pre></code></td></tr><tr><td>123</td><td><code><pre> }</pre></code></td></tr><tr><td>124</td><td><code><pre> if bl, _ := Callback(ono); bl {</pre></code></td></tr><tr class="miss"><td>125</td><td><code><pre> log.D("ccb success ")</pre></code></td></tr><tr class="miss"><td>126</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr class="miss"><td>127</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>128</td><td><code><pre> }</pre></code></td></tr><tr><td>129</td><td><code><pre> }</pre></code></td></tr><tr><td>130</td><td><code><pre> }</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@74:5">func @74:5</div><div class="info"><a href="#s_fn_@74:5">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderModel/thdPayAbout.go</code>:</p></div><table class="listing">
<tr><td>74</td><td><code><pre>func() {</pre></code></td></tr><tr><td>75</td><td><code><pre> timer := time.NewTicker(15 * time.Second)</pre></code></td></tr><tr><td>76</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>77</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>78</td><td><code><pre> for {</pre></code></td></tr><tr><td>79</td><td><code><pre> select {</pre></code></td></tr><tr><td>80</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr class="miss"><td>81</td><td><code><pre> if i < 3 {</pre></code></td></tr><tr class="miss"><td>82</td><td><code><pre> log.D("the %d times ccb fail", i)</pre></code></td></tr><tr class="miss"><td>83</td><td><code><pre> i++</pre></code></td></tr><tr><td>84</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>85</td><td><code><pre> log.D("kill timer ali fail")</pre></code></td></tr><tr class="miss"><td>86</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr class="miss"><td>87</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>89</td><td><code><pre> if bl, _ := AlipayPaySuccess(name, Type, money, pay_type, targetid, target_type, ono, status); bl {</pre></code></td></tr><tr class="miss"><td>90</td><td><code><pre> log.D("ccb success in fail")</pre></code></td></tr><tr class="miss"><td>91</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr class="miss"><td>92</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>93</td><td><code><pre> }</pre></code></td></tr><tr><td>94</td><td><code><pre> }</pre></code></td></tr><tr><td>95</td><td><code><pre> }</pre></code></td></tr><tr><td>96</td><td><code><pre> }</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:com.dy.order/orderModel DONE:84.15
-->
<div id="pkg_com.dy.order/orderalipay" class="funcname">Package Overview: com.dy.order/orderalipay <span class="packageTotal">88.91%</span></div><p>This is a coverage report created after analysis of the <code>com.dy.order/orderalipay</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test com.dy.order/orderalipay | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_GetRsaSign"><td><code><a href="#fn_GetRsaSign">GetRsaSign(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>20/20</code></td></tr>
<tr id="s_fn_getDataAli"><td><code><a href="#fn_getDataAli">getDataAli(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>12/12</code></td></tr>
<tr id="s_fn_CheckIsOnoExist"><td><code><a href="#fn_CheckIsOnoExist">CheckIsOnoExist(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>11/11</code></td></tr>
<tr id="s_fn_updateExpand"><td><code><a href="#fn_updateExpand">updateExpand(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
<tr id="s_fn_TestAlipay"><td><code><a href="#fn_TestAlipay">TestAlipay(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>8/8</code></td></tr>
<tr id="s_fn_getExpandByOno"><td><code><a href="#fn_getExpandByOno">getExpandByOno(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>5/5</code></td></tr>
<tr id="s_fn_@517:8"><td><code><a href="#fn_@517:8">@517:8(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_@39:8"><td><code><a href="#fn_@39:8">@39:8(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_@548:8"><td><code><a href="#fn_@548:8">@548:8(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_@26:6"><td><code><a href="#fn_@26:6">@26:6(...)</a></code></td><td><code>com.dy.order/orderalipay/perf.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_GetCurrentOno"><td><code><a href="#fn_GetCurrentOno">GetCurrentOno(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_NewOrderNo"><td><code><a href="#fn_NewOrderNo">NewOrderNo(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_SetCurrentOne"><td><code><a href="#fn_SetCurrentOne">SetCurrentOne(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>1/1</code></td></tr>
<tr id="s_fn_getDataWX"><td><code><a href="#fn_getDataWX">getDataWX(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>96.77%</code></td><td class="linecount"><code>30/31</code></td></tr>
<tr id="s_fn_ConfirmOrderPay"><td><code><a href="#fn_ConfirmOrderPay">ConfirmOrderPay(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>96.43%</code></td><td class="linecount"><code>54/56</code></td></tr>
<tr id="s_fn_DoPerf"><td><code><a href="#fn_DoPerf">DoPerf(...)</a></code></td><td><code>com.dy.order/orderalipay/perf.go</code></td><td class="percent"><code>95.45%</code></td><td class="linecount"><code>21/22</code></td></tr>
<tr id="s_fn_GetRsaSignJson"><td><code><a href="#fn_GetRsaSignJson">GetRsaSignJson(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>91.43%</code></td><td class="linecount"><code>32/35</code></td></tr>
<tr id="s_fn_CheckIsPay"><td><code><a href="#fn_CheckIsPay">CheckIsPay(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>85.71%</code></td><td class="linecount"><code>6/7</code></td></tr>
<tr id="s_fn_AlipayWebReturn"><td><code><a href="#fn_AlipayWebReturn">AlipayWebReturn(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>84.62%</code></td><td class="linecount"><code>11/13</code></td></tr>
<tr id="s_fn_AlipayRemoteRequest"><td><code><a href="#fn_AlipayRemoteRequest">AlipayRemoteRequest(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>84.51%</code></td><td class="linecount"><code>60/71</code></td></tr>
<tr id="s_fn_DealReqData"><td><code><a href="#fn_DealReqData">DealReqData(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>82.22%</code></td><td class="linecount"><code>37/45</code></td></tr>
<tr id="s_fn_InitAlipayConfig"><td><code><a href="#fn_InitAlipayConfig">InitAlipayConfig(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_config.go</code></td><td class="percent"><code>81.82%</code></td><td class="linecount"><code>9/11</code></td></tr>
<tr id="s_fn_AlipayWebNotify"><td><code><a href="#fn_AlipayWebNotify">AlipayWebNotify(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>12/15</code></td></tr>
<tr id="s_fn_AlipayMobileNotify"><td><code><a href="#fn_AlipayMobileNotify">AlipayMobileNotify(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>12/15</code></td></tr>
<tr id="s_fn_MobilePayTest"><td><code><a href="#fn_MobilePayTest">MobilePayTest(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>8/10</code></td></tr>
<tr id="s_fn_confirmWXPay"><td><code><a href="#fn_confirmWXPay">confirmWXPay(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>78.95%</code></td><td class="linecount"><code>15/19</code></td></tr>
<tr id="s_fn_CheckPaidcb"><td><code><a href="#fn_CheckPaidcb">CheckPaidcb(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>6/8</code></td></tr>
<tr id="s_fn_RandInt"><td><code><a href="#fn_RandInt">RandInt(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_mobile.go</code></td><td class="percent"><code>75.00%</code></td><td class="linecount"><code>3/4</code></td></tr>
<tr id="s_fn_confirmAliPay"><td><code><a href="#fn_confirmAliPay">confirmAliPay(...)</a></code></td><td><code>com.dy.order/orderalipay/alipay_web.go</code></td><td class="percent"><code>72.22%</code></td><td class="linecount"><code>13/18</code></td></tr>
<tr><td colspan="2"><code>com.dy.order/orderalipay</code></td><td class="percent"><code>88.91%</code></td><td class="linecount"><code>409/460</code></td></tr>
</table>
<div class="funcname" id="fn_GetRsaSign">func GetRsaSign</div><div class="info"><a href="#s_fn_GetRsaSign">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>66</td><td><code><pre>func GetRsaSign(hs *routing.HTTPSession) routing.HResult {</pre></code></td></tr><tr><td>67</td><td><code><pre></pre></code></td></tr><tr><td>68</td><td><code><pre> var (</pre></code></td></tr><tr><td>69</td><td><code><pre> orderNos string</pre></code></td></tr><tr><td>70</td><td><code><pre> // orderNo []string</pre></code></td></tr><tr><td>71</td><td><code><pre> err error</pre></code></td></tr><tr><td>72</td><td><code><pre> )</pre></code></td></tr><tr><td>73</td><td><code><pre></pre></code></td></tr><tr><td>74</td><td><code><pre> err = hs.ValidCheckVal(`</pre></code></td></tr><tr><td>75</td><td><code><pre> tradeNo,R|S,L:0;</pre></code></td></tr><tr><td>76</td><td><code><pre> `, &orderNos)</pre></code></td></tr><tr><td>77</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>78</td><td><code><pre> return hs.MsgResE(1, err.Error())</pre></code></td></tr><tr><td>79</td><td><code><pre> }</pre></code></td></tr><tr><td>80</td><td><code><pre></pre></code></td></tr><tr><td>81</td><td><code><pre> fmt.Println("orderNos = ", orderNos)</pre></code></td></tr><tr><td>82</td><td><code><pre></pre></code></td></tr><tr><td>83</td><td><code><pre> //tradeNo := hs.R.FormValue("tradeNo")</pre></code></td></tr><tr><td>84</td><td><code><pre> sumstr := hs.R.FormValue("totalFee")</pre></code></td></tr><tr><td>85</td><td><code><pre> sum, err := strconv.ParseFloat(sumstr, 64)</pre></code></td></tr><tr><td>86</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>87</td><td><code><pre> return hs.MsgResE(1, err.Error())</pre></code></td></tr><tr><td>88</td><td><code><pre> }</pre></code></td></tr><tr><td>89</td><td><code><pre> if sum <= 0 {</pre></code></td></tr><tr><td>90</td><td><code><pre> return hs.MsgResE(1, fmt.Sprintf("%s", "totalFee < 0"))</pre></code></td></tr><tr><td>91</td><td><code><pre> }</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr><td>93</td><td><code><pre> amr := alipay.AlipayMobileRequest{}</pre></code></td></tr><tr><td>94</td><td><code><pre> amr.OutTradeNo = NewOrderNo()</pre></code></td></tr><tr><td>95</td><td><code><pre> amr.Subject = "掌上学园商品"</pre></code></td></tr><tr><td>96</td><td><code><pre> amr.Body = "掌上学园商品"</pre></code></td></tr><tr><td>97</td><td><code><pre> amr.TotalFee = sum</pre></code></td></tr><tr><td>98</td><td><code><pre></pre></code></td></tr><tr><td>99</td><td><code><pre> fmt.Println(amr)</pre></code></td></tr><tr><td>100</td><td><code><pre> //fmt.Printf("alipay.AMobileConfig:%s\n", alipay.AMobileConfig)</pre></code></td></tr><tr><td>101</td><td><code><pre> orderinfo := alipay.AlipayMobileRsaSign(amr, alipay.AMobileConfig)</pre></code></td></tr><tr><td>102</td><td><code><pre></pre></code></td></tr><tr><td>103</td><td><code><pre> fmt.Println("orderinfo", orderinfo)</pre></code></td></tr><tr><td>104</td><td><code><pre> //fmt.Println(hs.MsgRes(orderinfo))</pre></code></td></tr><tr><td>105</td><td><code><pre> return hs.MsgRes(orderinfo)</pre></code></td></tr><tr><td>106</td><td><code><pre> //return routing.HRES_RETURN</pre></code></td></tr><tr><td>107</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_getDataAli">func getDataAli</div><div class="info"><a href="#s_fn_getDataAli">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>430</td><td><code><pre>func getDataAli(db *sql.DB, ono string) (*alipay.AlipayWebRequest, error) {</pre></code></td></tr><tr><td>431</td><td><code><pre></pre></code></td></tr><tr><td>432</td><td><code><pre> var totalFee float64</pre></code></td></tr><tr><td>433</td><td><code><pre> var subject string</pre></code></td></tr><tr><td>434</td><td><code><pre> _sql := `select total_price from ods_order where ono=?`</pre></code></td></tr><tr><td>435</td><td><code><pre> if err := db.QueryRow(_sql, ono).Scan(&totalFee); err != nil {</pre></code></td></tr><tr><td>436</td><td><code><pre> log.E("query total_price err in ods_order:%v", err.Error())</pre></code></td></tr><tr><td>437</td><td><code><pre> return &alipay.AlipayWebRequest{}, err</pre></code></td></tr><tr><td>438</td><td><code><pre> }</pre></code></td></tr><tr><td>439</td><td><code><pre> _sql = `select name from ods_record where ono=?`</pre></code></td></tr><tr><td>440</td><td><code><pre> if err := db.QueryRow(_sql, ono).Scan(&subject); err != nil {</pre></code></td></tr><tr><td>441</td><td><code><pre> log.E("query name err in ods_record:%v", err.Error())</pre></code></td></tr><tr><td>442</td><td><code><pre> return &alipay.AlipayWebRequest{}, err</pre></code></td></tr><tr><td>443</td><td><code><pre> }</pre></code></td></tr><tr><td>444</td><td><code><pre></pre></code></td></tr><tr><td>445</td><td><code><pre> r := &alipay.AlipayWebRequest{</pre></code></td></tr><tr><td>446</td><td><code><pre> OutTradeNo: ono, // 订单号</pre></code></td></tr><tr><td>447</td><td><code><pre> Subject: subject, // 商品名称</pre></code></td></tr><tr><td>448</td><td><code><pre> TotalFee: totalFee, // 价格</pre></code></td></tr><tr><td>449</td><td><code><pre> }</pre></code></td></tr><tr><td>450</td><td><code><pre> return r, nil</pre></code></td></tr><tr><td>451</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CheckIsOnoExist">func CheckIsOnoExist</div><div class="info"><a href="#s_fn_CheckIsOnoExist">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>583</td><td><code><pre>func CheckIsOnoExist(db *sql.DB, ono string, schema string) (bl bool, err error) {</pre></code></td></tr><tr><td>584</td><td><code><pre> IdCount := int64(0)</pre></code></td></tr><tr><td>585</td><td><code><pre> if ono != "" {</pre></code></td></tr><tr><td>586</td><td><code><pre> //checkIdSql := "select count(*) from " + schema + " where ono=?"</pre></code></td></tr><tr><td>587</td><td><code><pre> checkIdSql := fmt.Sprintf("%s%s%s%s%s", "select count(*) from ", schema, " where ono='", ono, "'")</pre></code></td></tr><tr><td>588</td><td><code><pre> if err = db.QueryRow(checkIdSql).Scan(&IdCount); err != nil {</pre></code></td></tr><tr><td>589</td><td><code><pre> log.E("%s", err.Error())</pre></code></td></tr><tr><td>590</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>591</td><td><code><pre> }</pre></code></td></tr><tr><td>592</td><td><code><pre> } else {</pre></code></td></tr><tr><td>593</td><td><code><pre> return false, errors.New("ono is nil")</pre></code></td></tr><tr><td>594</td><td><code><pre> }</pre></code></td></tr><tr><td>595</td><td><code><pre></pre></code></td></tr><tr><td>596</td><td><code><pre> if IdCount == 0 {</pre></code></td></tr><tr><td>597</td><td><code><pre> log.E("idcount:%d", IdCount)</pre></code></td></tr><tr><td>598</td><td><code><pre> return false, nil</pre></code></td></tr><tr><td>599</td><td><code><pre> }</pre></code></td></tr><tr><td>600</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>601</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_updateExpand">func updateExpand</div><div class="info"><a href="#s_fn_updateExpand">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>865</td><td><code><pre>func updateExpand(db *sql.DB, ono string, expand string) (bl bool, err error) {</pre></code></td></tr><tr><td>866</td><td><code><pre> bl = false</pre></code></td></tr><tr><td>867</td><td><code><pre> _sql := `update ods_order set expand=? where ono=?`</pre></code></td></tr><tr><td>868</td><td><code><pre> _, err = db.Exec(_sql, expand, ono)</pre></code></td></tr><tr><td>869</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>870</td><td><code><pre> log.E(err.Error())</pre></code></td></tr><tr><td>871</td><td><code><pre> return</pre></code></td></tr><tr><td>872</td><td><code><pre> }</pre></code></td></tr><tr><td>873</td><td><code><pre> bl = true</pre></code></td></tr><tr><td>874</td><td><code><pre> return</pre></code></td></tr><tr><td>875</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_TestAlipay">func TestAlipay</div><div class="info"><a href="#s_fn_TestAlipay">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>907</td><td><code><pre>func TestAlipay(hs *routing.HTTPSession) routing.HResult {</pre></code></td></tr><tr><td>908</td><td><code><pre></pre></code></td></tr><tr><td>909</td><td><code><pre> args, _ := alipay.GenTestData()</pre></code></td></tr><tr><td>910</td><td><code><pre></pre></code></td></tr><tr><td>911</td><td><code><pre> args_ := ""</pre></code></td></tr><tr><td>912</td><td><code><pre> for k, v := range args {</pre></code></td></tr><tr><td>913</td><td><code><pre> args_ += k + "=" + v + "&"</pre></code></td></tr><tr><td>914</td><td><code><pre> }</pre></code></td></tr><tr><td>915</td><td><code><pre> fmt.Println("https://www.alipay.com/cooperate/gateway.do?" + args_)</pre></code></td></tr><tr><td>916</td><td><code><pre> res, _ := util.HPost("https://www.alipay.com/cooperate/gateway.do", args)</pre></code></td></tr><tr><td>917</td><td><code><pre></pre></code></td></tr><tr><td>918</td><td><code><pre> hs.W.Write([]byte(res))</pre></code></td></tr><tr><td>919</td><td><code><pre></pre></code></td></tr><tr><td>920</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>921</td><td><code><pre> // return common.MsgRes(hs, parse)</pre></code></td></tr><tr><td>922</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_getExpandByOno">func getExpandByOno</div><div class="info"><a href="#s_fn_getExpandByOno">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>889</td><td><code><pre>func getExpandByOno(db *sql.DB, ono string) (expand string, err error) {</pre></code></td></tr><tr><td>890</td><td><code><pre></pre></code></td></tr><tr><td>891</td><td><code><pre> _sql := `select expand from ods_order where ono=?`</pre></code></td></tr><tr><td>892</td><td><code><pre> if err = db.QueryRow(_sql, ono).Scan(&expand); err != nil {</pre></code></td></tr><tr><td>893</td><td><code><pre> log.E("expand err %s", err.Error())</pre></code></td></tr><tr><td>894</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>895</td><td><code><pre> }</pre></code></td></tr><tr><td>896</td><td><code><pre> return</pre></code></td></tr><tr><td>897</td><td><code><pre></pre></code></td></tr><tr><td>898</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@517:8">func @517:8</div><div class="info"><a href="#s_fn_@517:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>517</td><td><code><pre>func() {</pre></code></td></tr><tr><td>518</td><td><code><pre> log.D("AlipayWebNotify Notify End")</pre></code></td></tr><tr><td>519</td><td><code><pre> log.D("callbackMsg to alipay notifyW: %v", callbackMsg)</pre></code></td></tr><tr><td>520</td><td><code><pre> w.Header().Set("Content-Type", "text/plain; charset=utf-8")</pre></code></td></tr><tr><td>521</td><td><code><pre> fmt.Fprint(w, callbackMsg)</pre></code></td></tr><tr><td>522</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@39:8">func @39:8</div><div class="info"><a href="#s_fn_@39:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>39</td><td><code><pre>func() {</pre></code></td></tr><tr><td>40</td><td><code><pre> log.D("alipay Notify End")</pre></code></td></tr><tr><td>41</td><td><code><pre> log.D("callbackMsg to alipayM : %v", callbackMsg)</pre></code></td></tr><tr><td>42</td><td><code><pre> w.Header().Set("Content-Type", "text/plain; charset=utf-8")</pre></code></td></tr><tr><td>43</td><td><code><pre> fmt.Fprint(w, callbackMsg)</pre></code></td></tr><tr><td>44</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@548:8">func @548:8</div><div class="info"><a href="#s_fn_@548:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>548</td><td><code><pre>func() {</pre></code></td></tr><tr><td>549</td><td><code><pre> log.D("AlipayWebReturn End")</pre></code></td></tr><tr><td>550</td><td><code><pre> log.D("callbackMsg to alipay return: %v", callbackMsg)</pre></code></td></tr><tr><td>551</td><td><code><pre> fmt.Fprint(w, callbackMsg)</pre></code></td></tr><tr><td>552</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@26:6">func @26:6</div><div class="info"><a href="#s_fn_@26:6">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/perf.go</code>:</p></div><table class="listing">
<tr><td>26</td><td><code><pre>func(v int64) {</pre></code></td></tr><tr><td>27</td><td><code><pre> call(v)</pre></code></td></tr><tr><td>28</td><td><code><pre> ws.Done()</pre></code></td></tr><tr><td>29</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_GetCurrentOno">func GetCurrentOno</div><div class="info"><a href="#s_fn_GetCurrentOno">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>903</td><td><code><pre>func GetCurrentOno() string {</pre></code></td></tr><tr><td>904</td><td><code><pre> return c_ono</pre></code></td></tr><tr><td>905</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_NewOrderNo">func NewOrderNo</div><div class="info"><a href="#s_fn_NewOrderNo">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>21</td><td><code><pre>func NewOrderNo() string {</pre></code></td></tr><tr><td>22</td><td><code><pre> return fmt.Sprintf("%s%d", time.Now().Format("20060102150405"), RandInt(10000, 99999))</pre></code></td></tr><tr><td>23</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_SetCurrentOne">func SetCurrentOne</div><div class="info"><a href="#s_fn_SetCurrentOne">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>900</td><td><code><pre>func SetCurrentOne(ono string) {</pre></code></td></tr><tr><td>901</td><td><code><pre> c_ono = ono</pre></code></td></tr><tr><td>902</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_getDataWX">func getDataWX</div><div class="info"><a href="#s_fn_getDataWX">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>453</td><td><code><pre>func getDataWX(db *sql.DB, ono string, payType string) (*wechatPay.Unifiedorder, error) {</pre></code></td></tr><tr><td>454</td><td><code><pre></pre></code></td></tr><tr><td>455</td><td><code><pre> var totalFee float64</pre></code></td></tr><tr><td>456</td><td><code><pre> var subject string</pre></code></td></tr><tr><td>457</td><td><code><pre> _sql := `select total_price from ods_order where ono=?`</pre></code></td></tr><tr><td>458</td><td><code><pre> if err := db.QueryRow(_sql, ono).Scan(&totalFee); err != nil {</pre></code></td></tr><tr><td>459</td><td><code><pre> log.E("query total_price err in ods_order:%v", err.Error())</pre></code></td></tr><tr><td>460</td><td><code><pre> return &wechatPay.Unifiedorder{}, err</pre></code></td></tr><tr><td>461</td><td><code><pre> }</pre></code></td></tr><tr><td>462</td><td><code><pre> _sql = `select name from ods_record where ono=?`</pre></code></td></tr><tr><td>463</td><td><code><pre> if err := db.QueryRow(_sql, ono).Scan(&subject); err != nil {</pre></code></td></tr><tr><td>464</td><td><code><pre> log.E("query name err in ods_record:%v", err.Error())</pre></code></td></tr><tr><td>465</td><td><code><pre> return &wechatPay.Unifiedorder{}, err</pre></code></td></tr><tr><td>466</td><td><code><pre> }</pre></code></td></tr><tr><td>467</td><td><code><pre> s := fmt.Sprintf("%.2f", totalFee)</pre></code></td></tr><tr><td>468</td><td><code><pre> i, err := strconv.ParseFloat(s, 64)</pre></code></td></tr><tr><td>469</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>470</td><td><code><pre> return &wechatPay.Unifiedorder{}, errors.New("TotalFee err")</pre></code></td></tr><tr><td>471</td><td><code><pre> }</pre></code></td></tr><tr><td>472</td><td><code><pre></pre></code></td></tr><tr><td>473</td><td><code><pre> //</pre></code></td></tr><tr><td>474</td><td><code><pre> if payType == way[2] {</pre></code></td></tr><tr><td>475</td><td><code><pre> u := wechatPay.NewUnifiedorder(wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>476</td><td><code><pre> u.Nonce_str = wechatPay.Md5String(wechatPay.NewOrderNo())</pre></code></td></tr><tr><td>477</td><td><code><pre> u.Body = subject</pre></code></td></tr><tr><td>478</td><td><code><pre> u.Out_trade_no = ono</pre></code></td></tr><tr><td>479</td><td><code><pre> //fmt.Println("TotalFee:", totalFee*100)</pre></code></td></tr><tr><td>480</td><td><code><pre> u.Total_fee = fmt.Sprintf("%d", int(i*100))</pre></code></td></tr><tr><td>481</td><td><code><pre> u.Spbill_create_ip = "127.0.0.1"</pre></code></td></tr><tr><td>482</td><td><code><pre> // 交易类型 JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 MICROPAY--刷卡支付</pre></code></td></tr><tr><td>483</td><td><code><pre> u.Trade_type = "APP"</pre></code></td></tr><tr><td>484</td><td><code><pre> // uresp, err := u.TakeOrder(wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>485</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>486</td><td><code><pre> // log.E("TakeOrder err:", err.Error())</pre></code></td></tr><tr><td>487</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>488</td><td><code><pre> // }</pre></code></td></tr><tr><td>489</td><td><code><pre> //fmt.Println("u.TotalFee:", u.Total_fee)</pre></code></td></tr><tr><td>490</td><td><code><pre></pre></code></td></tr><tr><td>491</td><td><code><pre> return u, nil</pre></code></td></tr><tr><td>492</td><td><code><pre> } else {</pre></code></td></tr><tr><td>493</td><td><code><pre> u := wechatPay.NewUnifiedorder(wechatPay.GWxNativePayConfig)</pre></code></td></tr><tr><td>494</td><td><code><pre> // 随机字符串</pre></code></td></tr><tr><td>495</td><td><code><pre> u.Nonce_str = wechatPay.Md5String(wechatPay.NewOrderNo())</pre></code></td></tr><tr><td>496</td><td><code><pre> // 商品描述</pre></code></td></tr><tr><td>497</td><td><code><pre> u.Body = subject</pre></code></td></tr><tr><td>498</td><td><code><pre> // 商户订单号</pre></code></td></tr><tr><td>499</td><td><code><pre> u.Out_trade_no = ono</pre></code></td></tr><tr><td>500</td><td><code><pre> // // 总金额</pre></code></td></tr><tr><td>501</td><td><code><pre> u.Total_fee = fmt.Sprintf("%d", int(i*100))</pre></code></td></tr><tr><td>502</td><td><code><pre> // // 终端IP</pre></code></td></tr><tr><td>503</td><td><code><pre> u.Spbill_create_ip = "127.0.0.1"</pre></code></td></tr><tr><td>504</td><td><code><pre> // // 交易类型 JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 MICROPAY--刷卡支付</pre></code></td></tr><tr><td>505</td><td><code><pre> u.Trade_type = "NATIVE"</pre></code></td></tr><tr><td>506</td><td><code><pre></pre></code></td></tr><tr><td>507</td><td><code><pre> return u, nil</pre></code></td></tr><tr><td>508</td><td><code><pre> }</pre></code></td></tr><tr><td>509</td><td><code><pre></pre></code></td></tr><tr><td>510</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_ConfirmOrderPay">func ConfirmOrderPay</div><div class="info"><a href="#s_fn_ConfirmOrderPay">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>274</td><td><code><pre>func ConfirmOrderPay(ono, payType, token string) (string, error) {</pre></code></td></tr><tr><td>275</td><td><code><pre> log.D("=============begin corfirmPay===============")</pre></code></td></tr><tr><td>276</td><td><code><pre> if ono == "" || payType == "" {</pre></code></td></tr><tr><td>277</td><td><code><pre> log.E("ono or payType is nil")</pre></code></td></tr><tr><td>278</td><td><code><pre> return "", errors.New("ono or payType is nil")</pre></code></td></tr><tr><td>279</td><td><code><pre> }</pre></code></td></tr><tr><td>280</td><td><code><pre> isIn := false //in way</pre></code></td></tr><tr><td>281</td><td><code><pre></pre></code></td></tr><tr><td>282</td><td><code><pre> for _, v := range way {</pre></code></td></tr><tr><td>283</td><td><code><pre> if payType == v {</pre></code></td></tr><tr><td>284</td><td><code><pre> isIn = true</pre></code></td></tr><tr><td>285</td><td><code><pre> log.D("payType match")</pre></code></td></tr><tr><td>286</td><td><code><pre> break</pre></code></td></tr><tr><td>287</td><td><code><pre> }</pre></code></td></tr><tr><td>288</td><td><code><pre> }</pre></code></td></tr><tr><td>289</td><td><code><pre> if isIn != true {</pre></code></td></tr><tr><td>290</td><td><code><pre> log.E(payType + " is not support")</pre></code></td></tr><tr><td>291</td><td><code><pre> return "", errors.New(payType + " is not support")</pre></code></td></tr><tr><td>292</td><td><code><pre> }</pre></code></td></tr><tr><td>293</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>294</td><td><code><pre> //以后会增加状态,暂时用不到</pre></code></td></tr><tr><td>295</td><td><code><pre> isOnoExist, err := CheckIsOnoExist(db, ono, "ods_order")</pre></code></td></tr><tr><td>296</td><td><code><pre> if isOnoExist != true || err != nil {</pre></code></td></tr><tr><td>297</td><td><code><pre> log.E("ono is not exist")</pre></code></td></tr><tr><td>298</td><td><code><pre> return "", errors.New("ono is not exist")</pre></code></td></tr><tr><td>299</td><td><code><pre> }</pre></code></td></tr><tr><td>300</td><td><code><pre> //</pre></code></td></tr><tr><td>301</td><td><code><pre> // if isOnoExist != true {</pre></code></td></tr><tr><td>302</td><td><code><pre> // log.E("ono is not exist")</pre></code></td></tr><tr><td>303</td><td><code><pre> // return "", errors.New("ono is not exist")</pre></code></td></tr><tr><td>304</td><td><code><pre> // }</pre></code></td></tr><tr><td>305</td><td><code><pre> status, err := CheckIsPay(db, ono, "ods_order")</pre></code></td></tr><tr><td>306</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>307</td><td><code><pre> log.E(err.Error())</pre></code></td></tr><tr><td>308</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>309</td><td><code><pre> }</pre></code></td></tr><tr><td>310</td><td><code><pre> if status == "PAID" || status == "paid" {</pre></code></td></tr><tr><td>311</td><td><code><pre> log.D("%v has paid", ono)</pre></code></td></tr><tr><td>312</td><td><code><pre> return "", errors.New(ono + " has paid")</pre></code></td></tr><tr><td>313</td><td><code><pre> }</pre></code></td></tr><tr><td>314</td><td><code><pre> if token != "" {</pre></code></td></tr><tr><td>315</td><td><code><pre></pre></code></td></tr><tr><td>316</td><td><code><pre> oldExpand, err := getExpandByOno(db, ono)</pre></code></td></tr><tr><td>317</td><td><code><pre></pre></code></td></tr><tr><td>318</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>319</td><td><code><pre> log.E("%s", err.Error())</pre></code></td></tr><tr><td>320</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>321</td><td><code><pre> }</pre></code></td></tr><tr><td>322</td><td><code><pre> s_expand := strings.Split(oldExpand, "&")</pre></code></td></tr><tr><td>323</td><td><code><pre> for i := 0; i < len(s_expand); i++ {</pre></code></td></tr><tr><td>324</td><td><code><pre> ss := strings.Split(s_expand[i], "=")</pre></code></td></tr><tr><td>325</td><td><code><pre> if "token" == ss[0] || "TOKEN" == ss[0] {</pre></code></td></tr><tr><td>326</td><td><code><pre> s_expand[i] = ss[0] + "=" + token</pre></code></td></tr><tr><td>327</td><td><code><pre> break</pre></code></td></tr><tr><td>328</td><td><code><pre> }</pre></code></td></tr><tr><td>329</td><td><code><pre> }</pre></code></td></tr><tr><td>330</td><td><code><pre> expand := strings.Join(s_expand, "&")</pre></code></td></tr><tr><td>331</td><td><code><pre> log.D("expand:%v", expand)</pre></code></td></tr><tr><td>332</td><td><code><pre> if bl, err := updateExpand(db, ono, expand); bl != true {</pre></code></td></tr><tr><td>333</td><td><code><pre> log.E("updateExpand err: ", err.Error())</pre></code></td></tr><tr><td>334</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>335</td><td><code><pre> }</pre></code></td></tr><tr><td>336</td><td><code><pre> }</pre></code></td></tr><tr><td>337</td><td><code><pre></pre></code></td></tr><tr><td>338</td><td><code><pre> switch payType {</pre></code></td></tr><tr><td>339</td><td><code><pre> case way[0]:</pre></code></td></tr><tr><td>340</td><td><code><pre> fallthrough</pre></code></td></tr><tr><td>341</td><td><code><pre> case way[1]:</pre></code></td></tr><tr><td>342</td><td><code><pre> r, err := getDataAli(db, ono)</pre></code></td></tr><tr><td>343</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>344</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>345</td><td><code><pre> }</pre></code></td></tr><tr><td>346</td><td><code><pre> return confirmAliPay(payType, r)</pre></code></td></tr><tr><td>347</td><td><code><pre> case way[2]:</pre></code></td></tr><tr><td>348</td><td><code><pre> u, err := getDataWX(db, ono, payType)</pre></code></td></tr><tr><td>349</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>350</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>351</td><td><code><pre> }</pre></code></td></tr><tr><td>352</td><td><code><pre> return confirmWXPay(payType, u, ono)</pre></code></td></tr><tr><td>353</td><td><code><pre> case way[3]:</pre></code></td></tr><tr><td>354</td><td><code><pre> //WN</pre></code></td></tr><tr><td>355</td><td><code><pre> u, err := getDataWX(db, ono, payType)</pre></code></td></tr><tr><td>356</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>357</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>358</td><td><code><pre> }</pre></code></td></tr><tr><td>359</td><td><code><pre> return confirmWXPay(payType, u, ono)</pre></code></td></tr><tr><td>360</td><td><code><pre> default:</pre></code></td></tr><tr class="miss"><td>361</td><td><code><pre> return "", errors.New(payType + " is not support")</pre></code></td></tr><tr><td>362</td><td><code><pre> }</pre></code></td></tr><tr><td>363</td><td><code><pre></pre></code></td></tr><tr><td>364</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DoPerf">func DoPerf</div><div class="info"><a href="#s_fn_DoPerf">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/perf.go</code>:</p></div><table class="listing">
<tr><td>10</td><td><code><pre>func DoPerf(tc int, logf string, call func(int64)) (int64, error) {</pre></code></td></tr><tr><td>11</td><td><code><pre> stdout := os.Stdout</pre></code></td></tr><tr><td>12</td><td><code><pre> stderr := os.Stderr</pre></code></td></tr><tr><td>13</td><td><code><pre> if len(logf) > 0 {</pre></code></td></tr><tr><td>14</td><td><code><pre> f, err := os.OpenFile(logf, os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)</pre></code></td></tr><tr><td>15</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>16</td><td><code><pre> return 0, err</pre></code></td></tr><tr><td>17</td><td><code><pre> }</pre></code></td></tr><tr><td>18</td><td><code><pre> os.Stdout = f</pre></code></td></tr><tr><td>19</td><td><code><pre> os.Stderr = f</pre></code></td></tr><tr><td>20</td><td><code><pre> log.SetWriter(f)</pre></code></td></tr><tr><td>21</td><td><code><pre> }</pre></code></td></tr><tr><td>22</td><td><code><pre> ws := sync.WaitGroup{}</pre></code></td></tr><tr><td>23</td><td><code><pre> ws.Add(tc)</pre></code></td></tr><tr><td>24</td><td><code><pre> beg := util.Now()</pre></code></td></tr><tr><td>25</td><td><code><pre> for i := 0; i < tc; i++ {</pre></code></td></tr><tr><td>26</td><td><code><pre> go func(v int64) {</pre></code></td></tr><tr><td>27</td><td><code><pre> call(v)</pre></code></td></tr><tr><td>28</td><td><code><pre> ws.Done()</pre></code></td></tr><tr><td>29</td><td><code><pre> }(int64(i))</pre></code></td></tr><tr><td>30</td><td><code><pre> }</pre></code></td></tr><tr><td>31</td><td><code><pre> ws.Wait()</pre></code></td></tr><tr><td>32</td><td><code><pre> end := util.Now()</pre></code></td></tr><tr><td>33</td><td><code><pre> if len(logf) > 0 {</pre></code></td></tr><tr><td>34</td><td><code><pre> os.Stdout.Close()</pre></code></td></tr><tr><td>35</td><td><code><pre> os.Stdout = stdout</pre></code></td></tr><tr><td>36</td><td><code><pre> os.Stderr = stderr</pre></code></td></tr><tr><td>37</td><td><code><pre> log.SetWriter(os.Stdout)</pre></code></td></tr><tr><td>38</td><td><code><pre> }</pre></code></td></tr><tr><td>39</td><td><code><pre> return end - beg, nil</pre></code></td></tr><tr><td>40</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_GetRsaSignJson">func GetRsaSignJson</div><div class="info"><a href="#s_fn_GetRsaSignJson">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>110</td><td><code><pre>func GetRsaSignJson(req string) (string, error) {</pre></code></td></tr><tr><td>111</td><td><code><pre></pre></code></td></tr><tr><td>112</td><td><code><pre> var err error</pre></code></td></tr><tr><td>113</td><td><code><pre></pre></code></td></tr><tr><td>114</td><td><code><pre> log.D("begin GetRsaSignJson remote request")</pre></code></td></tr><tr><td>115</td><td><code><pre> fmt.Printf("req:%s\n", []byte(req))</pre></code></td></tr><tr><td>116</td><td><code><pre> var js AlipayRemoteReqStruct</pre></code></td></tr><tr><td>117</td><td><code><pre> err = json.Unmarshal([]byte(req), &js)</pre></code></td></tr><tr><td>118</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>119</td><td><code><pre> log.E("format err")</pre></code></td></tr><tr><td>120</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre> fmt.Printf("js:%s\n", js)</pre></code></td></tr><tr><td>123</td><td><code><pre></pre></code></td></tr><tr><td>124</td><td><code><pre> if err := orderModel.CheckParas(orderModel.CommonRemoteReqStruct(js)); err != nil {</pre></code></td></tr><tr><td>125</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>126</td><td><code><pre> }</pre></code></td></tr><tr><td>127</td><td><code><pre></pre></code></td></tr><tr><td>128</td><td><code><pre> //detect integral</pre></code></td></tr><tr><td>129</td><td><code><pre> if err = orderModel.DetectIntegral(common.DbConn(), js.Integral, js.Buyer, js.TotalFee); err != nil {</pre></code></td></tr><tr><td>130</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>131</td><td><code><pre> }</pre></code></td></tr><tr><td>132</td><td><code><pre></pre></code></td></tr><tr><td>133</td><td><code><pre> ono := NewOrderNo()</pre></code></td></tr><tr><td>134</td><td><code><pre> //deal req data</pre></code></td></tr><tr><td>135</td><td><code><pre> if _, err := DealReqData(&js, ono); err != nil {</pre></code></td></tr><tr><td>136</td><td><code><pre> log.E("DealReqData err:", err)</pre></code></td></tr><tr><td>137</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr><td>139</td><td><code><pre> //全积分暂不支持</pre></code></td></tr><tr><td>140</td><td><code><pre> //</pre></code></td></tr><tr><td>141</td><td><code><pre> orderinfo := ""</pre></code></td></tr><tr><td>142</td><td><code><pre> if js.TotalFee > 0 {</pre></code></td></tr><tr><td>143</td><td><code><pre> amr := alipay.AlipayMobileRequest{}</pre></code></td></tr><tr><td>144</td><td><code><pre> amr.OutTradeNo = ono</pre></code></td></tr><tr><td>145</td><td><code><pre> amr.Subject = js.Subject // 商品名称</pre></code></td></tr><tr><td>146</td><td><code><pre> amr.Body = js.Body</pre></code></td></tr><tr><td>147</td><td><code><pre> amr.TotalFee = js.TotalFee // 价格</pre></code></td></tr><tr><td>148</td><td><code><pre></pre></code></td></tr><tr><td>149</td><td><code><pre> orderinfo = alipay.AlipayMobileRsaSign(amr, alipay.AMobileConfig)</pre></code></td></tr><tr><td>150</td><td><code><pre></pre></code></td></tr><tr><td>151</td><td><code><pre> fmt.Println("orderinfo:", orderinfo)</pre></code></td></tr><tr><td>152</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>153</td><td><code><pre> orderinfo = "success"</pre></code></td></tr><tr><td>154</td><td><code><pre> }</pre></code></td></tr><tr><td>155</td><td><code><pre> orderInfoJson := map[string]interface{}{}</pre></code></td></tr><tr><td>156</td><td><code><pre> orderInfoJson["code"] = "0"</pre></code></td></tr><tr><td>157</td><td><code><pre> orderInfoJson["data"] = orderinfo</pre></code></td></tr><tr><td>158</td><td><code><pre> returnJs, err := json.Marshal(orderInfoJson)</pre></code></td></tr><tr><td>159</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>160</td><td><code><pre> log.E("json:", err.Error())</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>162</td><td><code><pre> }</pre></code></td></tr><tr><td>163</td><td><code><pre> return string(returnJs), nil</pre></code></td></tr><tr><td>164</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CheckIsPay">func CheckIsPay</div><div class="info"><a href="#s_fn_CheckIsPay">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>604</td><td><code><pre>func CheckIsPay(db *sql.DB, ono string, schema string) (status string, err error) {</pre></code></td></tr><tr><td>605</td><td><code><pre></pre></code></td></tr><tr><td>606</td><td><code><pre> if bl, _ := CheckIsOnoExist(db, ono, schema); bl != true {</pre></code></td></tr><tr class="miss"><td>607</td><td><code><pre> return "", errors.New("ono not exist")</pre></code></td></tr><tr><td>608</td><td><code><pre> }</pre></code></td></tr><tr><td>609</td><td><code><pre> _sql := fmt.Sprintf("%s%s%s%s%s", "select status from ", schema, " where ono='", ono, "'")</pre></code></td></tr><tr><td>610</td><td><code><pre> err = db.QueryRow(_sql).Scan(&status)</pre></code></td></tr><tr><td>611</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>612</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>613</td><td><code><pre> }</pre></code></td></tr><tr><td>614</td><td><code><pre> return</pre></code></td></tr><tr><td>615</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AlipayWebReturn">func AlipayWebReturn</div><div class="info"><a href="#s_fn_AlipayWebReturn">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>544</td><td><code><pre>func AlipayWebReturn(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>545</td><td><code><pre> log.D("AlipayWebReturn Begin")</pre></code></td></tr><tr><td>546</td><td><code><pre></pre></code></td></tr><tr><td>547</td><td><code><pre> var callbackMsg = "验证失败,请联系客服"</pre></code></td></tr><tr><td>548</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>549</td><td><code><pre> log.D("AlipayWebReturn End")</pre></code></td></tr><tr><td>550</td><td><code><pre> log.D("callbackMsg to alipay return: %v", callbackMsg)</pre></code></td></tr><tr><td>551</td><td><code><pre> fmt.Fprint(w, callbackMsg)</pre></code></td></tr><tr><td>552</td><td><code><pre> }()</pre></code></td></tr><tr><td>553</td><td><code><pre> // r.Header.Set("Content-Type", "application/x-www-form-urlencoded")</pre></code></td></tr><tr><td>554</td><td><code><pre> // r.PostForm = nil</pre></code></td></tr><tr><td>555</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>556</td><td><code><pre></pre></code></td></tr><tr><td>557</td><td><code><pre> log.D("==========================================================")</pre></code></td></tr><tr><td>558</td><td><code><pre> log.D("AlipayWebReturn Request :%v", r)</pre></code></td></tr><tr><td>559</td><td><code><pre> log.D("==========================================================")</pre></code></td></tr><tr><td>560</td><td><code><pre></pre></code></td></tr><tr><td>561</td><td><code><pre> if err := alipay.VerifyWebNotify(r, alipay.AWebConfig); err != nil {</pre></code></td></tr><tr><td>562</td><td><code><pre> //验证失败</pre></code></td></tr><tr><td>563</td><td><code><pre> log.D("verify webreturn fail")</pre></code></td></tr><tr><td>564</td><td><code><pre> callbackMsg = "同步跳转检验失败,请联系客服"</pre></code></td></tr><tr><td>565</td><td><code><pre> return</pre></code></td></tr><tr><td>566</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>567</td><td><code><pre> callbackMsg = orderModel.DealAliReturn(r)</pre></code></td></tr><tr><td>568</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>569</td><td><code><pre> return</pre></code></td></tr><tr><td>570</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AlipayRemoteRequest">func AlipayRemoteRequest</div><div class="info"><a href="#s_fn_AlipayRemoteRequest">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>63</td><td><code><pre>func AlipayRemoteRequest(req string) (htm string, err error) {</pre></code></td></tr><tr><td>64</td><td><code><pre> // js := AlipayRemoteReqStruct{}</pre></code></td></tr><tr><td>65</td><td><code><pre> log.D("begin remote request")</pre></code></td></tr><tr><td>66</td><td><code><pre> fmt.Printf("req:%s\n", []byte(req))</pre></code></td></tr><tr><td>67</td><td><code><pre> var js AlipayRemoteReqStruct</pre></code></td></tr><tr><td>68</td><td><code><pre> err = json.Unmarshal([]byte(req), &js)</pre></code></td></tr><tr><td>69</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>70</td><td><code><pre> log.E("format err")</pre></code></td></tr><tr><td>71</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>72</td><td><code><pre> }</pre></code></td></tr><tr><td>73</td><td><code><pre> //log.D("json format right")</pre></code></td></tr><tr><td>74</td><td><code><pre> if err := orderModel.CheckParas(orderModel.CommonRemoteReqStruct(js)); err != nil {</pre></code></td></tr><tr><td>75</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>76</td><td><code><pre> }</pre></code></td></tr><tr><td>77</td><td><code><pre></pre></code></td></tr><tr><td>78</td><td><code><pre> fmt.Println(js)</pre></code></td></tr><tr><td>79</td><td><code><pre> ono := NewOrderNo()</pre></code></td></tr><tr><td>80</td><td><code><pre> SetCurrentOne(ono)</pre></code></td></tr><tr><td>81</td><td><code><pre></pre></code></td></tr><tr><td>82</td><td><code><pre> //sync uap</pre></code></td></tr><tr><td>83</td><td><code><pre> if err := orderModel.SynUser(js.Seller, js.Buyer); err != nil {</pre></code></td></tr><tr><td>84</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>85</td><td><code><pre> }</pre></code></td></tr><tr><td>86</td><td><code><pre></pre></code></td></tr><tr><td>87</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>88</td><td><code><pre></pre></code></td></tr><tr><td>89</td><td><code><pre> isOnoExist, err := CheckIsOnoExist(db, js.Ono, "ods_order")</pre></code></td></tr><tr><td>90</td><td><code><pre> //ono is nil 为正常情况</pre></code></td></tr><tr><td>91</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>92</td><td><code><pre> if err.Error() == "ono is nil" {</pre></code></td></tr><tr><td>93</td><td><code><pre></pre></code></td></tr><tr><td>94</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>95</td><td><code><pre> log.E("%s", err.Error())</pre></code></td></tr><tr class="miss"><td>96</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>97</td><td><code><pre> }</pre></code></td></tr><tr><td>98</td><td><code><pre> }</pre></code></td></tr><tr><td>99</td><td><code><pre> //检测积分</pre></code></td></tr><tr><td>100</td><td><code><pre> if err = orderModel.DetectIntegral(db, js.Integral, js.Buyer, js.TotalFee); err != nil {</pre></code></td></tr><tr><td>101</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>102</td><td><code><pre> }</pre></code></td></tr><tr><td>103</td><td><code><pre></pre></code></td></tr><tr><td>104</td><td><code><pre> //integral 假定1==1分</pre></code></td></tr><tr><td>105</td><td><code><pre> _, _needpay, _payway := orderModel.PayTypeAndNeedPay(js.Integral, js.TotalFee)</pre></code></td></tr><tr><td>106</td><td><code><pre></pre></code></td></tr><tr><td>107</td><td><code><pre> log.D("integral:%f,%f", js.TotalFee, float64(js.Integral)/100.0)</pre></code></td></tr><tr><td>108</td><td><code><pre></pre></code></td></tr><tr><td>109</td><td><code><pre> tx, err := db.Begin()</pre></code></td></tr><tr><td>110</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>111</td><td><code><pre> fmt.Printf("start a transaction err,%s\n", err.Error())</pre></code></td></tr><tr class="miss"><td>112</td><td><code><pre> return "", errors.New("start a transaction err")</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr><td>114</td><td><code><pre></pre></code></td></tr><tr><td>115</td><td><code><pre> //OrderType := js.Type</pre></code></td></tr><tr><td>116</td><td><code><pre> //if OrderType == "REFUND" {</pre></code></td></tr><tr><td>117</td><td><code><pre> // ----------暂时用不到,以后有refund 请勿删除-----------</pre></code></td></tr><tr><td>118</td><td><code><pre> // log.D("Type Refund")</pre></code></td></tr><tr><td>119</td><td><code><pre> // if js.Ono == "" {</pre></code></td></tr><tr><td>120</td><td><code><pre> // log.E("Ono is nil")</pre></code></td></tr><tr><td>121</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>122</td><td><code><pre> // return "", errors.New("Ono is nil")</pre></code></td></tr><tr><td>123</td><td><code><pre> // }</pre></code></td></tr><tr><td>124</td><td><code><pre> // if bl, err := CheckIsExist(db, js.Ono, 0, "ods_order"); bl != true {</pre></code></td></tr><tr><td>125</td><td><code><pre> // log.E("Ono is not exist in db")</pre></code></td></tr><tr><td>126</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>127</td><td><code><pre> // return "", errors.New("ono is not exist:" + err.Error())</pre></code></td></tr><tr><td>128</td><td><code><pre> // }</pre></code></td></tr><tr><td>129</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>130</td><td><code><pre> // if bl, _ := CheckIsExist(db, js.Ono, js.OrderItem[i].P_id, "ods_order_item"); bl != true {</pre></code></td></tr><tr><td>131</td><td><code><pre> // log.E("ono or oid is not exist in order_item")</pre></code></td></tr><tr><td>132</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>133</td><td><code><pre> // return "", errors.New("ono or oid is not exist in order_item")</pre></code></td></tr><tr><td>134</td><td><code><pre> // }</pre></code></td></tr><tr><td>135</td><td><code><pre> // }</pre></code></td></tr><tr><td>136</td><td><code><pre> // //更改order_item</pre></code></td></tr><tr><td>137</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>138</td><td><code><pre> // _sql := `update ods_order_item set type ='REFUNG' where ono=? and p_id=?`</pre></code></td></tr><tr><td>139</td><td><code><pre> // _, err = tx.Exec(_sql, js.OrderItem[i].Ono, js.OrderItem[i].P_id)</pre></code></td></tr><tr><td>140</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>141</td><td><code><pre> // log.E("exec order_item refund err")</pre></code></td></tr><tr><td>142</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>143</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>144</td><td><code><pre> // }</pre></code></td></tr><tr><td>145</td><td><code><pre> // }</pre></code></td></tr><tr><td>146</td><td><code><pre></pre></code></td></tr><tr><td>147</td><td><code><pre> // //insert refund</pre></code></td></tr><tr><td>148</td><td><code><pre> // for i := 0; i < len(js.OrderRefund); i++ {</pre></code></td></tr><tr><td>149</td><td><code><pre> // _sql := `insert into ods_order_refund(ono,item,content,imgs,status) value(?,?,?,?,?)`</pre></code></td></tr><tr><td>150</td><td><code><pre> // _, err = tx.Exec(_sql, js.OrderRefund[i].Ono, js.OrderRefund[i].Item, js.OrderRefund[i].Imgs, js.OrderRefund[i].Status)</pre></code></td></tr><tr><td>151</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>152</td><td><code><pre> // log.E("Add OrderItem error %v", err.Error())</pre></code></td></tr><tr><td>153</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>154</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>155</td><td><code><pre> // }</pre></code></td></tr><tr><td>156</td><td><code><pre> // }</pre></code></td></tr><tr><td>157</td><td><code><pre> // //record</pre></code></td></tr><tr><td>158</td><td><code><pre> // //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>159</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "REFUND", js.TotalFee, js.Buyer, "ALIPAY", js.Seller, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>160</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>161</td><td><code><pre> // }</pre></code></td></tr><tr><td>162</td><td><code><pre> // //uid-->seller target_id-->buyer</pre></code></td></tr><tr><td>163</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "REFUND", js.TotalFee, js.Seller, "ALIPAY", js.Buyer, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>164</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>165</td><td><code><pre> // }</pre></code></td></tr><tr><td>166</td><td><code><pre> //} else {</pre></code></td></tr><tr><td>167</td><td><code><pre> log.D("Type N")</pre></code></td></tr><tr><td>168</td><td><code><pre> if js.TotalFee < 0 || (js.TotalFee == 0 && js.Integral == 0) {</pre></code></td></tr><tr><td>169</td><td><code><pre> log.E("消费金额或积分有误:%v", js.TotalFee)</pre></code></td></tr><tr><td>170</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>171</td><td><code><pre> return "", errors.New("TotalFee error")</pre></code></td></tr><tr><td>172</td><td><code><pre> }</pre></code></td></tr><tr><td>173</td><td><code><pre></pre></code></td></tr><tr><td>174</td><td><code><pre> //同一订单</pre></code></td></tr><tr><td>175</td><td><code><pre> if isOnoExist == false {</pre></code></td></tr><tr><td>176</td><td><code><pre> //insert item</pre></code></td></tr><tr><td>177</td><td><code><pre> log.D("length orderItem:%d", len(js.OrderItem))</pre></code></td></tr><tr><td>178</td><td><code><pre> log.D("%v", js.OrderItem)</pre></code></td></tr><tr><td>179</td><td><code><pre> if len(js.OrderItem) < 1 {</pre></code></td></tr><tr><td>180</td><td><code><pre> log.E("OrderItem is nil")</pre></code></td></tr><tr><td>181</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>182</td><td><code><pre> return "", errors.New("OrderItem is nil")</pre></code></td></tr><tr><td>183</td><td><code><pre> }</pre></code></td></tr><tr><td>184</td><td><code><pre> //detect paid_cb</pre></code></td></tr><tr><td>185</td><td><code><pre> if err := CheckPaidcb(js.OrderItem[0].P_from); err != nil {</pre></code></td></tr><tr class="miss"><td>186</td><td><code><pre> log.E("p_from err:%s", js.OrderItem[0].P_from)</pre></code></td></tr><tr class="miss"><td>187</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>188</td><td><code><pre> return "", errors.New("p_from err,系统暂不支持")</pre></code></td></tr><tr><td>189</td><td><code><pre> }</pre></code></td></tr><tr><td>190</td><td><code><pre></pre></code></td></tr><tr><td>191</td><td><code><pre> if err := orderModel.InsertOrderItem(tx, orderModel.CommonRemoteReqStruct(js), ono); err != nil {</pre></code></td></tr><tr><td>192</td><td><code><pre> log.E("InsertOrderItem err:%v", err.Error())</pre></code></td></tr><tr><td>193</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>194</td><td><code><pre> }</pre></code></td></tr><tr><td>195</td><td><code><pre></pre></code></td></tr><tr><td>196</td><td><code><pre> //_payway 0:正常支付 1:有积分有💰 2:全积分</pre></code></td></tr><tr><td>197</td><td><code><pre> if 2 == _payway || 1 == _payway {</pre></code></td></tr><tr><td>198</td><td><code><pre> // //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>199</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "INCOME", float64(js.Integral), js.Buyer, "大洋币", js.Seller, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>200</td><td><code><pre> // log.E("insertRecord: %v", err.Error())</pre></code></td></tr><tr><td>201</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>202</td><td><code><pre> // }</pre></code></td></tr><tr><td>203</td><td><code><pre> // //uid-->seller target_id-->buyer</pre></code></td></tr><tr><td>204</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "PAY", float64(js.Integral), js.Seller, "大洋币", js.Buyer, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>205</td><td><code><pre> // log.E("insertRecord: %v", err.Error())</pre></code></td></tr><tr><td>206</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>207</td><td><code><pre> // }</pre></code></td></tr><tr><td>208</td><td><code><pre> // //deduct</pre></code></td></tr><tr><td>209</td><td><code><pre> // _n_integral := ^js.Integral + 1</pre></code></td></tr><tr><td>210</td><td><code><pre> // if bl, err := UpdateIntegral(tx, _n_integral, js.Buyer); bl != true {</pre></code></td></tr><tr><td>211</td><td><code><pre> // log.E("UpdateIntegral: %v", err.Error())</pre></code></td></tr><tr><td>212</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>213</td><td><code><pre> // }</pre></code></td></tr><tr><td>214</td><td><code><pre> if err := orderModel.InsertWithIntegral(tx, orderModel.CommonRemoteReqStruct(js), ono); err != nil {</pre></code></td></tr><tr><td>215</td><td><code><pre> log.E("InsertWithIntegral: %v", err.Error())</pre></code></td></tr><tr><td>216</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>217</td><td><code><pre> }</pre></code></td></tr><tr><td>218</td><td><code><pre></pre></code></td></tr><tr><td>219</td><td><code><pre> }</pre></code></td></tr><tr><td>220</td><td><code><pre> if 0 == _payway || 1 == _payway {</pre></code></td></tr><tr><td>221</td><td><code><pre> // //record</pre></code></td></tr><tr><td>222</td><td><code><pre> if err := orderModel.InsertWithRMB(tx, orderModel.CommonRemoteReqStruct(js), ono, _needpay, "ALIPAYW"); err != nil {</pre></code></td></tr><tr><td>223</td><td><code><pre> log.E("InsertWithRMB: %v", err.Error())</pre></code></td></tr><tr><td>224</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>225</td><td><code><pre> }</pre></code></td></tr><tr><td>226</td><td><code><pre> }</pre></code></td></tr><tr><td>227</td><td><code><pre> }</pre></code></td></tr><tr><td>228</td><td><code><pre></pre></code></td></tr><tr><td>229</td><td><code><pre> //}</pre></code></td></tr><tr><td>230</td><td><code><pre></pre></code></td></tr><tr><td>231</td><td><code><pre> //insert order</pre></code></td></tr><tr><td>232</td><td><code><pre> // status := "NOT_PAY"</pre></code></td></tr><tr><td>233</td><td><code><pre> if isOnoExist == false {</pre></code></td></tr><tr><td>234</td><td><code><pre> // _sql := `insert into ods_order(ono,buyer,seller,total_price,type,status,return_url,expand) value(?,?,?,?,?,?,?,?)`</pre></code></td></tr><tr><td>235</td><td><code><pre> // _, err = tx.Exec(_sql, ono, js.Buyer, js.Seller, js.TotalFee, js.Type, js.Status, js.Return_url, js.Expand)</pre></code></td></tr><tr><td>236</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>237</td><td><code><pre> // log.E("Add Order error %v", err.Error())</pre></code></td></tr><tr><td>238</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>239</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>240</td><td><code><pre> // }</pre></code></td></tr><tr><td>241</td><td><code><pre> if err := orderModel.InsertOdsOrder(tx, orderModel.CommonRemoteReqStruct(js), ono); err != nil {</pre></code></td></tr><tr><td>242</td><td><code><pre> log.E("InsertOdsOrder: %v", err.Error())</pre></code></td></tr><tr><td>243</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>244</td><td><code><pre> }</pre></code></td></tr><tr><td>245</td><td><code><pre> }</pre></code></td></tr><tr><td>246</td><td><code><pre> err = tx.Commit()</pre></code></td></tr><tr><td>247</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>248</td><td><code><pre> log.E("AddOrder commit error %v", err.Error())</pre></code></td></tr><tr class="miss"><td>249</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>250</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>251</td><td><code><pre> }</pre></code></td></tr><tr><td>252</td><td><code><pre></pre></code></td></tr><tr><td>253</td><td><code><pre> if _payway == 2 {</pre></code></td></tr><tr><td>254</td><td><code><pre> //total integral, update data</pre></code></td></tr><tr><td>255</td><td><code><pre></pre></code></td></tr><tr><td>256</td><td><code><pre> return "integral total", nil</pre></code></td></tr><tr><td>257</td><td><code><pre> }</pre></code></td></tr><tr><td>258</td><td><code><pre></pre></code></td></tr><tr><td>259</td><td><code><pre> alipayR := &alipay.AlipayWebRequest{</pre></code></td></tr><tr><td>260</td><td><code><pre> OutTradeNo: ono, // 订单号</pre></code></td></tr><tr><td>261</td><td><code><pre> Subject: js.Subject, // 商品名称</pre></code></td></tr><tr><td>262</td><td><code><pre> TotalFee: js.TotalFee, // 价格</pre></code></td></tr><tr><td>263</td><td><code><pre> Body: js.Body,</pre></code></td></tr><tr><td>264</td><td><code><pre> }</pre></code></td></tr><tr><td>265</td><td><code><pre> // 输出的是 html 页面,会自动跳转到支付界面</pre></code></td></tr><tr><td>266</td><td><code><pre> htm, err = alipay.AlipayRemoteRequestForm(alipay.AWebConfig, alipayR)</pre></code></td></tr><tr><td>267</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>268</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>269</td><td><code><pre> }</pre></code></td></tr><tr><td>270</td><td><code><pre> return htm, nil</pre></code></td></tr><tr><td>271</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DealReqData">func DealReqData</div><div class="info"><a href="#s_fn_DealReqData">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>166</td><td><code><pre>func DealReqData(js *AlipayRemoteReqStruct, ono string) (string, error) {</pre></code></td></tr><tr><td>167</td><td><code><pre></pre></code></td></tr><tr><td>168</td><td><code><pre> //sync uap</pre></code></td></tr><tr><td>169</td><td><code><pre> if err := orderModel.SynUser(js.Seller, js.Buyer); err != nil {</pre></code></td></tr><tr><td>170</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>171</td><td><code><pre> }</pre></code></td></tr><tr><td>172</td><td><code><pre></pre></code></td></tr><tr><td>173</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>174</td><td><code><pre> tx, err := db.Begin()</pre></code></td></tr><tr><td>175</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>176</td><td><code><pre> fmt.Printf("start a transaction err,%s\n", err.Error())</pre></code></td></tr><tr class="miss"><td>177</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>178</td><td><code><pre> }</pre></code></td></tr><tr><td>179</td><td><code><pre> //isOnoExist, isExistErr := CheckIsExist(db, js.Ono, 0, "ods_order")</pre></code></td></tr><tr><td>180</td><td><code><pre> isOnoExist, _ := orderModel.CheckIsExist(db, js.Ono, 0, "ods_order")</pre></code></td></tr><tr><td>181</td><td><code><pre> //integral 假定1==1分</pre></code></td></tr><tr><td>182</td><td><code><pre></pre></code></td></tr><tr><td>183</td><td><code><pre> _, _needpay, _payway := orderModel.PayTypeAndNeedPay(js.Integral, js.TotalFee)</pre></code></td></tr><tr><td>184</td><td><code><pre></pre></code></td></tr><tr><td>185</td><td><code><pre> //======以后会有refund 请勿删除=====</pre></code></td></tr><tr><td>186</td><td><code><pre> //OrderType := js.Type</pre></code></td></tr><tr><td>187</td><td><code><pre> // if OrderType == "REFUND" {</pre></code></td></tr><tr><td>188</td><td><code><pre> // log.D("Type Refund")</pre></code></td></tr><tr><td>189</td><td><code><pre> // if js.Ono == "" {</pre></code></td></tr><tr><td>190</td><td><code><pre> // log.E("Ono is nil")</pre></code></td></tr><tr><td>191</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>192</td><td><code><pre> // return "", errors.New("Ono is nil")</pre></code></td></tr><tr><td>193</td><td><code><pre> // }</pre></code></td></tr><tr><td>194</td><td><code><pre> // if isOnoExist != true {</pre></code></td></tr><tr><td>195</td><td><code><pre> // log.E("Ono is not exist in db")</pre></code></td></tr><tr><td>196</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>197</td><td><code><pre> // return "", errors.New("ono is not exist:" + isExistErr.Error())</pre></code></td></tr><tr><td>198</td><td><code><pre> // }</pre></code></td></tr><tr><td>199</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>200</td><td><code><pre> // if bl, _ := CheckIsExist(db, js.Ono, js.OrderItem[i].P_id, "ods_order_item"); bl != true {</pre></code></td></tr><tr><td>201</td><td><code><pre> // log.E("ono or oid is not exist in order_item")</pre></code></td></tr><tr><td>202</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>203</td><td><code><pre> // return "", errors.New("ono or oid is not exist in order_item")</pre></code></td></tr><tr><td>204</td><td><code><pre> // }</pre></code></td></tr><tr><td>205</td><td><code><pre> // }</pre></code></td></tr><tr><td>206</td><td><code><pre> // //更改order_item</pre></code></td></tr><tr><td>207</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>208</td><td><code><pre> // _sql := `update ods_order_item set type ='REFUNG' where ono=? and p_id=?`</pre></code></td></tr><tr><td>209</td><td><code><pre> // _, err = tx.Exec(_sql, js.OrderItem[i].Ono, js.OrderItem[i].P_id)</pre></code></td></tr><tr><td>210</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>211</td><td><code><pre> // log.E("exec order_item refund err")</pre></code></td></tr><tr><td>212</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>213</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>214</td><td><code><pre> // }</pre></code></td></tr><tr><td>215</td><td><code><pre> // }</pre></code></td></tr><tr><td>216</td><td><code><pre></pre></code></td></tr><tr><td>217</td><td><code><pre> // //insert refund</pre></code></td></tr><tr><td>218</td><td><code><pre> // for i := 0; i < len(js.OrderRefund); i++ {</pre></code></td></tr><tr><td>219</td><td><code><pre> // _sql := `insert into ods_order_refund(ono,item,content,imgs,status) value(?,?,?,?,?)`</pre></code></td></tr><tr><td>220</td><td><code><pre> // _, err = tx.Exec(_sql, js.OrderRefund[i].Ono, js.OrderRefund[i].Item, js.OrderRefund[i].Imgs, js.OrderRefund[i].Status)</pre></code></td></tr><tr><td>221</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>222</td><td><code><pre> // log.E("Add OrderItem error %v", err.Error())</pre></code></td></tr><tr><td>223</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>224</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>225</td><td><code><pre> // }</pre></code></td></tr><tr><td>226</td><td><code><pre> // }</pre></code></td></tr><tr><td>227</td><td><code><pre> // //record</pre></code></td></tr><tr><td>228</td><td><code><pre> // //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>229</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "REFUND", js.TotalFee, js.Buyer, "ALIPAY", js.Seller, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>230</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>231</td><td><code><pre> // }</pre></code></td></tr><tr><td>232</td><td><code><pre> // //uid-->seller target_id-->buyer</pre></code></td></tr><tr><td>233</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "REFUND", js.TotalFee, js.Seller, "ALIPAY", js.Buyer, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>234</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>235</td><td><code><pre> // }</pre></code></td></tr><tr><td>236</td><td><code><pre></pre></code></td></tr><tr><td>237</td><td><code><pre> // } else {</pre></code></td></tr><tr><td>238</td><td><code><pre> log.D("Type N")</pre></code></td></tr><tr><td>239</td><td><code><pre> if js.TotalFee < 0 || (js.TotalFee == 0 && js.Integral == 0) {</pre></code></td></tr><tr><td>240</td><td><code><pre> log.E("消费金额<=0:%v", js.TotalFee)</pre></code></td></tr><tr><td>241</td><td><code><pre> return "", errors.New("TotalFee error")</pre></code></td></tr><tr><td>242</td><td><code><pre> }</pre></code></td></tr><tr><td>243</td><td><code><pre> //同一订单</pre></code></td></tr><tr><td>244</td><td><code><pre> if !isOnoExist {</pre></code></td></tr><tr><td>245</td><td><code><pre> //insert item</pre></code></td></tr><tr><td>246</td><td><code><pre> log.D("length orderItem:%d", len(js.OrderItem))</pre></code></td></tr><tr><td>247</td><td><code><pre> log.D("%v", js.OrderItem)</pre></code></td></tr><tr><td>248</td><td><code><pre> if len(js.OrderItem) < 1 {</pre></code></td></tr><tr><td>249</td><td><code><pre> log.E("OrderItem is nil")</pre></code></td></tr><tr><td>250</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>251</td><td><code><pre> return "", errors.New("OrderItem is nil")</pre></code></td></tr><tr><td>252</td><td><code><pre> }</pre></code></td></tr><tr><td>253</td><td><code><pre> //detect paid_cb</pre></code></td></tr><tr><td>254</td><td><code><pre> if err := CheckPaidcb(js.OrderItem[0].P_from); err != nil {</pre></code></td></tr><tr class="miss"><td>255</td><td><code><pre> log.E("p_from err")</pre></code></td></tr><tr class="miss"><td>256</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>257</td><td><code><pre> return "", errors.New("p_from err")</pre></code></td></tr><tr><td>258</td><td><code><pre> }</pre></code></td></tr><tr><td>259</td><td><code><pre></pre></code></td></tr><tr><td>260</td><td><code><pre> if err := orderModel.InsertOrderItem(tx, orderModel.CommonRemoteReqStruct(*js), ono); err != nil {</pre></code></td></tr><tr><td>261</td><td><code><pre> log.E("InsertOrderItem err:%v", err.Error())</pre></code></td></tr><tr><td>262</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>263</td><td><code><pre> }</pre></code></td></tr><tr><td>264</td><td><code><pre> //_payway 0:正常支付 1:有积分有💰 2:全积分</pre></code></td></tr><tr><td>265</td><td><code><pre> if 2 == _payway || 1 == _payway {</pre></code></td></tr><tr><td>266</td><td><code><pre> // //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>267</td><td><code><pre> if err := orderModel.InsertWithIntegral(tx, orderModel.CommonRemoteReqStruct(*js), ono); err != nil {</pre></code></td></tr><tr><td>268</td><td><code><pre> log.E("InsertWithIntegral: %v", err.Error())</pre></code></td></tr><tr><td>269</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>270</td><td><code><pre> }</pre></code></td></tr><tr><td>271</td><td><code><pre> }</pre></code></td></tr><tr><td>272</td><td><code><pre> if 0 == _payway || 1 == _payway {</pre></code></td></tr><tr><td>273</td><td><code><pre> //record</pre></code></td></tr><tr><td>274</td><td><code><pre> //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>275</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "INCOME", _needpay, js.Buyer, "ALIPAY", js.Seller, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>276</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>277</td><td><code><pre> // }</pre></code></td></tr><tr><td>278</td><td><code><pre> // //uid-->seller target_id-->buyer</pre></code></td></tr><tr><td>279</td><td><code><pre> // if bl, err := InsertRecord(tx, js.Subject, "PAY", _needpay, js.Seller, "ALIPAY", js.Buyer, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>280</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>281</td><td><code><pre> // }</pre></code></td></tr><tr><td>282</td><td><code><pre> if err := orderModel.InsertWithRMB(tx, orderModel.CommonRemoteReqStruct(*js), ono, _needpay, "ALIPAYM"); err != nil {</pre></code></td></tr><tr><td>283</td><td><code><pre> log.E("InsertWithRMB: %v", err.Error())</pre></code></td></tr><tr><td>284</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>285</td><td><code><pre> }</pre></code></td></tr><tr><td>286</td><td><code><pre> }</pre></code></td></tr><tr><td>287</td><td><code><pre> }</pre></code></td></tr><tr><td>288</td><td><code><pre> // }</pre></code></td></tr><tr><td>289</td><td><code><pre> //insert order</pre></code></td></tr><tr><td>290</td><td><code><pre> // status := "NOT_PAY"</pre></code></td></tr><tr><td>291</td><td><code><pre> if !isOnoExist {</pre></code></td></tr><tr><td>292</td><td><code><pre> // _sql := `insert into ods_order(ono,buyer,seller,total_price,type,status,return_url,expand) value(?,?,?,?,?,?,?,?)`</pre></code></td></tr><tr><td>293</td><td><code><pre> // _, err = tx.Exec(_sql, ono, js.Buyer, js.Seller, js.TotalFee, js.Type, js.Status, js.Return_url, js.Expand)</pre></code></td></tr><tr><td>294</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>295</td><td><code><pre> // log.E("Add Order error %v", err.Error())</pre></code></td></tr><tr><td>296</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>297</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>298</td><td><code><pre> // }</pre></code></td></tr><tr><td>299</td><td><code><pre> if err := orderModel.InsertOdsOrder(tx, orderModel.CommonRemoteReqStruct(*js), ono); err != nil {</pre></code></td></tr><tr><td>300</td><td><code><pre> log.E("InsertOdsOrder: %v", err.Error())</pre></code></td></tr><tr><td>301</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>302</td><td><code><pre> }</pre></code></td></tr><tr><td>303</td><td><code><pre> }</pre></code></td></tr><tr><td>304</td><td><code><pre> err = tx.Commit()</pre></code></td></tr><tr><td>305</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>306</td><td><code><pre> log.E("AddOrder commit error %v", err.Error())</pre></code></td></tr><tr class="miss"><td>307</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>308</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>309</td><td><code><pre> }</pre></code></td></tr><tr><td>310</td><td><code><pre> return "", nil</pre></code></td></tr><tr><td>311</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_InitAlipayConfig">func InitAlipayConfig</div><div class="info"><a href="#s_fn_InitAlipayConfig">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_config.go</code>:</p></div><table class="listing">
<tr><td>42</td><td><code><pre>func InitAlipayConfig() {</pre></code></td></tr><tr><td>43</td><td><code><pre></pre></code></td></tr><tr><td>44</td><td><code><pre> host := conf.Order_host()</pre></code></td></tr><tr><td>45</td><td><code><pre> //host := "14.23.162.170:12000"</pre></code></td></tr><tr><td>46</td><td><code><pre> //host := "192.168.10.118:8888"</pre></code></td></tr><tr><td>47</td><td><code><pre></pre></code></td></tr><tr><td>48</td><td><code><pre> // alipay.AWebConfig = &alipay.AlipayConfig{</pre></code></td></tr><tr><td>49</td><td><code><pre> // Partner: partner,</pre></code></td></tr><tr><td>50</td><td><code><pre> // Key: key,</pre></code></td></tr><tr><td>51</td><td><code><pre> // // Sign_type: "MD5",</pre></code></td></tr><tr><td>52</td><td><code><pre> // Sign_type: "RSA",</pre></code></td></tr><tr><td>53</td><td><code><pre> // // Private_key_path: []byte(private_key),</pre></code></td></tr><tr><td>54</td><td><code><pre> // // Ali_public_key_path: []byte(public_key),</pre></code></td></tr><tr><td>55</td><td><code><pre> // //Input_charset: "utf-8",</pre></code></td></tr><tr><td>56</td><td><code><pre> // Input_charset: "GBK",</pre></code></td></tr><tr><td>57</td><td><code><pre> // Cacert: "Cacert",</pre></code></td></tr><tr><td>58</td><td><code><pre> // Transport: "http",</pre></code></td></tr><tr><td>59</td><td><code><pre> // Service: "create_direct_pay_by_user",</pre></code></td></tr><tr><td>60</td><td><code><pre> // Seller_id: seller,</pre></code></td></tr><tr><td>61</td><td><code><pre> // Payment_type: "1",</pre></code></td></tr><tr><td>62</td><td><code><pre> // Show_order_url: "/paymentStatus.html",</pre></code></td></tr><tr><td>63</td><td><code><pre> // }</pre></code></td></tr><tr><td>64</td><td><code><pre></pre></code></td></tr><tr><td>65</td><td><code><pre> // alipay.AMobileConfig = &alipay.AlipayConfig{</pre></code></td></tr><tr><td>66</td><td><code><pre> // Partner: partner,</pre></code></td></tr><tr><td>67</td><td><code><pre> // Key: key,</pre></code></td></tr><tr><td>68</td><td><code><pre> // Sign_type: "RSA",</pre></code></td></tr><tr><td>69</td><td><code><pre> // Private_key_path: []byte(private_key),</pre></code></td></tr><tr><td>70</td><td><code><pre> // Ali_public_key_path: []byte(public_key),</pre></code></td></tr><tr><td>71</td><td><code><pre> // Input_charset: "UTF-8",</pre></code></td></tr><tr><td>72</td><td><code><pre> // Cacert: "Cacert",</pre></code></td></tr><tr><td>73</td><td><code><pre> // Transport: "http",</pre></code></td></tr><tr><td>74</td><td><code><pre> // Service: "mobile.securitypay.pay",</pre></code></td></tr><tr><td>75</td><td><code><pre> // Seller_id: seller,</pre></code></td></tr><tr><td>76</td><td><code><pre> // Payment_type: "1",</pre></code></td></tr><tr><td>77</td><td><code><pre> // }</pre></code></td></tr><tr><td>78</td><td><code><pre></pre></code></td></tr><tr><td>79</td><td><code><pre> // alipay.AWapConfig = &alipay.AlipayConfig{</pre></code></td></tr><tr><td>80</td><td><code><pre> // Partner: partner,</pre></code></td></tr><tr><td>81</td><td><code><pre> // Key: key,</pre></code></td></tr><tr><td>82</td><td><code><pre> // Sign_type: "MD5",</pre></code></td></tr><tr><td>83</td><td><code><pre> // Private_key_path: []byte(private_key),</pre></code></td></tr><tr><td>84</td><td><code><pre> // Ali_public_key_path: []byte(public_key),</pre></code></td></tr><tr><td>85</td><td><code><pre> // Input_charset: "utf-8",</pre></code></td></tr><tr><td>86</td><td><code><pre> // Transport: "http",</pre></code></td></tr><tr><td>87</td><td><code><pre> // Service: "alipay.wap.auth.authAndExecute",</pre></code></td></tr><tr><td>88</td><td><code><pre> // Wap_Service: "alipay.wap.trade.create.direct",</pre></code></td></tr><tr><td>89</td><td><code><pre> // Seller_id: seller,</pre></code></td></tr><tr><td>90</td><td><code><pre> // Show_order_url: "/paymentStatus.html",</pre></code></td></tr><tr><td>91</td><td><code><pre> // }</pre></code></td></tr><tr><td>92</td><td><code><pre></pre></code></td></tr><tr><td>93</td><td><code><pre> alipay.AMobileConfig.Notify_url = fmt.Sprintf("http://%v/alipay-mobile-notify", host)</pre></code></td></tr><tr><td>94</td><td><code><pre> alipay.AMobileConfig.Return_url = fmt.Sprintf("http://%v/alipay-mobile-return", host)</pre></code></td></tr><tr><td>95</td><td><code><pre> //alipay.AMobileConfig.Return_url = fmt.Sprintf("http://%v/alipay-mobile-return", "192.168.2.174")</pre></code></td></tr><tr><td>96</td><td><code><pre> err := alipay.Init(alipay.AMobileConfig)</pre></code></td></tr><tr><td>97</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>98</td><td><code><pre> fmt.Println(err)</pre></code></td></tr><tr class="miss"><td>99</td><td><code><pre> return</pre></code></td></tr><tr><td>100</td><td><code><pre> }</pre></code></td></tr><tr><td>101</td><td><code><pre></pre></code></td></tr><tr><td>102</td><td><code><pre> // alipay.AWapConfig.Notify_url = fmt.Sprintf("http://%v/alipay-wap-notify", host)</pre></code></td></tr><tr><td>103</td><td><code><pre> // alipay.AWapConfig.Wap_merchant_url = fmt.Sprintf("http://%v/merchant", host)</pre></code></td></tr><tr><td>104</td><td><code><pre> // alipay.AWapConfig.Wap_callback_url = fmt.Sprintf("http://%v/alipay-wap-callback", host)</pre></code></td></tr><tr><td>105</td><td><code><pre> // alipay.AWapConfig.Show_order_url = fmt.Sprintf("http://%v/orderDetail", host)</pre></code></td></tr><tr><td>106</td><td><code><pre></pre></code></td></tr><tr><td>107</td><td><code><pre> // alipay.Init(alipay.AWapConfig)</pre></code></td></tr><tr><td>108</td><td><code><pre></pre></code></td></tr><tr><td>109</td><td><code><pre> alipay.AWebConfig.Notify_url = fmt.Sprintf("http://%v/alipay-web-notify", host)</pre></code></td></tr><tr><td>110</td><td><code><pre> alipay.AWebConfig.Return_url = fmt.Sprintf("http://%v/alipay-web-return", host)</pre></code></td></tr><tr><td>111</td><td><code><pre> alipay.AWebConfig.Show_order_url = fmt.Sprintf("http://%v/orderDetail", host)</pre></code></td></tr><tr><td>112</td><td><code><pre></pre></code></td></tr><tr><td>113</td><td><code><pre> alipay.Init(alipay.AWebConfig)</pre></code></td></tr><tr><td>114</td><td><code><pre></pre></code></td></tr><tr><td>115</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AlipayWebNotify">func AlipayWebNotify</div><div class="info"><a href="#s_fn_AlipayWebNotify">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>513</td><td><code><pre>func AlipayWebNotify(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>514</td><td><code><pre> log.D("AlipayWebNotify Begin")</pre></code></td></tr><tr><td>515</td><td><code><pre></pre></code></td></tr><tr><td>516</td><td><code><pre> var callbackMsg = "fail"</pre></code></td></tr><tr><td>517</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>518</td><td><code><pre> log.D("AlipayWebNotify Notify End")</pre></code></td></tr><tr><td>519</td><td><code><pre> log.D("callbackMsg to alipay notifyW: %v", callbackMsg)</pre></code></td></tr><tr><td>520</td><td><code><pre> w.Header().Set("Content-Type", "text/plain; charset=utf-8")</pre></code></td></tr><tr><td>521</td><td><code><pre> fmt.Fprint(w, callbackMsg)</pre></code></td></tr><tr><td>522</td><td><code><pre> }()</pre></code></td></tr><tr><td>523</td><td><code><pre></pre></code></td></tr><tr><td>524</td><td><code><pre> r.Header.Set("Content-Type", "application/x-www-form-urlencoded")</pre></code></td></tr><tr><td>525</td><td><code><pre> r.PostForm = nil</pre></code></td></tr><tr><td>526</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>527</td><td><code><pre></pre></code></td></tr><tr><td>528</td><td><code><pre> log.D("==========================================================")</pre></code></td></tr><tr><td>529</td><td><code><pre> log.D("AlipayWebNotify Request :%v", r)</pre></code></td></tr><tr><td>530</td><td><code><pre> log.D("==========================================================")</pre></code></td></tr><tr><td>531</td><td><code><pre></pre></code></td></tr><tr><td>532</td><td><code><pre> if err := alipay.VerifyWebNotify(r, alipay.AWebConfig); err != nil {</pre></code></td></tr><tr><td>533</td><td><code><pre> //验证失败</pre></code></td></tr><tr><td>534</td><td><code><pre> log.D("verify notify fail")</pre></code></td></tr><tr><td>535</td><td><code><pre> return</pre></code></td></tr><tr><td>536</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>537</td><td><code><pre> orderModel.DealAliNotify(r, `ALIPAY`, "web")</pre></code></td></tr><tr><td>538</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>539</td><td><code><pre> callbackMsg = "success"</pre></code></td></tr><tr class="miss"><td>540</td><td><code><pre> return</pre></code></td></tr><tr><td>541</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_AlipayMobileNotify">func AlipayMobileNotify</div><div class="info"><a href="#s_fn_AlipayMobileNotify">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>35</td><td><code><pre>func AlipayMobileNotify(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>36</td><td><code><pre> log.D("-----AlipayMobileNotify Notify Begin------")</pre></code></td></tr><tr><td>37</td><td><code><pre></pre></code></td></tr><tr><td>38</td><td><code><pre> var callbackMsg = "fail"</pre></code></td></tr><tr><td>39</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>40</td><td><code><pre> log.D("alipay Notify End")</pre></code></td></tr><tr><td>41</td><td><code><pre> log.D("callbackMsg to alipayM : %v", callbackMsg)</pre></code></td></tr><tr><td>42</td><td><code><pre> w.Header().Set("Content-Type", "text/plain; charset=utf-8")</pre></code></td></tr><tr><td>43</td><td><code><pre> fmt.Fprint(w, callbackMsg)</pre></code></td></tr><tr><td>44</td><td><code><pre> }()</pre></code></td></tr><tr><td>45</td><td><code><pre></pre></code></td></tr><tr><td>46</td><td><code><pre> r.Header.Set("Content-Type", "application/x-www-form-urlencoded")</pre></code></td></tr><tr><td>47</td><td><code><pre> r.PostForm = nil</pre></code></td></tr><tr><td>48</td><td><code><pre> r.ParseForm()</pre></code></td></tr><tr><td>49</td><td><code><pre></pre></code></td></tr><tr><td>50</td><td><code><pre> fmt.Println("==========================================================")</pre></code></td></tr><tr><td>51</td><td><code><pre> fmt.Println("Request :%v", r)</pre></code></td></tr><tr><td>52</td><td><code><pre> fmt.Println("==========================================================")</pre></code></td></tr><tr><td>53</td><td><code><pre></pre></code></td></tr><tr><td>54</td><td><code><pre> if err := alipay.VerifyMobileNotify(r, alipay.AMobileConfig); err != nil {</pre></code></td></tr><tr><td>55</td><td><code><pre> //验证失败</pre></code></td></tr><tr><td>56</td><td><code><pre> log.D("verify notify fail")</pre></code></td></tr><tr><td>57</td><td><code><pre> return</pre></code></td></tr><tr><td>58</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>59</td><td><code><pre> orderModel.DealAliNotify(r, `ALIPAY`, "mobile")</pre></code></td></tr><tr><td>60</td><td><code><pre></pre></code></td></tr><tr class="miss"><td>61</td><td><code><pre> callbackMsg = "success"</pre></code></td></tr><tr class="miss"><td>62</td><td><code><pre> return</pre></code></td></tr><tr><td>63</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_MobilePayTest">func MobilePayTest</div><div class="info"><a href="#s_fn_MobilePayTest">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>313</td><td><code><pre>func MobilePayTest(w http.ResponseWriter, r *http.Request) {</pre></code></td></tr><tr><td>314</td><td><code><pre> m := AlipayRemoteReqStruct{</pre></code></td></tr><tr><td>315</td><td><code><pre> Ono: "",</pre></code></td></tr><tr><td>316</td><td><code><pre> Buyer: 267250,</pre></code></td></tr><tr><td>317</td><td><code><pre> Seller: 438982,</pre></code></td></tr><tr><td>318</td><td><code><pre> Subject: "功夫熊猫3",</pre></code></td></tr><tr><td>319</td><td><code><pre> TotalFee: 0.01,</pre></code></td></tr><tr><td>320</td><td><code><pre> Body: "指纹打卡",</pre></code></td></tr><tr><td>321</td><td><code><pre> Type: "N",</pre></code></td></tr><tr><td>322</td><td><code><pre> Status: "NOT_PAY",</pre></code></td></tr><tr><td>323</td><td><code><pre> Return_url: "http://rcp.dev.jxzy.com/questionPoolDetailNew.html?id=40781&eid=55651",</pre></code></td></tr><tr><td>324</td><td><code><pre> Expand: "id=40781&token=2b8294d19c4a0c9729b685abbd1e3341-9767721f-75bc-47f2-b46a-f1377bae47f4",</pre></code></td></tr><tr><td>325</td><td><code><pre> }</pre></code></td></tr><tr><td>326</td><td><code><pre> orderi := orderModel.Item{</pre></code></td></tr><tr><td>327</td><td><code><pre> Ono: "",</pre></code></td></tr><tr><td>328</td><td><code><pre> Oid: int64(10000),</pre></code></td></tr><tr><td>329</td><td><code><pre> P_name: "balabalabala",</pre></code></td></tr><tr><td>330</td><td><code><pre> P_id: int64(11111),</pre></code></td></tr><tr><td>331</td><td><code><pre> P_type: "",</pre></code></td></tr><tr><td>332</td><td><code><pre> P_count: 1,</pre></code></td></tr><tr><td>333</td><td><code><pre> P_from: "TEST",</pre></code></td></tr><tr><td>334</td><td><code><pre> Notified: 0,</pre></code></td></tr><tr><td>335</td><td><code><pre> Price: 0.01,</pre></code></td></tr><tr><td>336</td><td><code><pre> Type: "N",</pre></code></td></tr><tr><td>337</td><td><code><pre> Status: "N",</pre></code></td></tr><tr><td>338</td><td><code><pre> }</pre></code></td></tr><tr><td>339</td><td><code><pre> m.OrderItem = append(m.OrderItem, orderi)</pre></code></td></tr><tr><td>340</td><td><code><pre> bytes, _ := json.Marshal(m)</pre></code></td></tr><tr><td>341</td><td><code><pre> var str string</pre></code></td></tr><tr><td>342</td><td><code><pre> var err error</pre></code></td></tr><tr><td>343</td><td><code><pre> if str, err = GetRsaSignJson(string(bytes)); err != nil {</pre></code></td></tr><tr class="miss"><td>344</td><td><code><pre> fmt.Println(err)</pre></code></td></tr><tr class="miss"><td>345</td><td><code><pre> return</pre></code></td></tr><tr><td>346</td><td><code><pre> }</pre></code></td></tr><tr><td>347</td><td><code><pre> fmt.Fprint(w, str)</pre></code></td></tr><tr><td>348</td><td><code><pre></pre></code></td></tr><tr><td>349</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_confirmWXPay">func confirmWXPay</div><div class="info"><a href="#s_fn_confirmWXPay">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>392</td><td><code><pre>func confirmWXPay(payType string, u *wechatPay.Unifiedorder, ono string) (string, error) {</pre></code></td></tr><tr><td>393</td><td><code><pre></pre></code></td></tr><tr><td>394</td><td><code><pre> // uresp, err := u.TakeOrder(wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>395</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>396</td><td><code><pre> // log.E("TakeOrder err:", err.Error())</pre></code></td></tr><tr><td>397</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>398</td><td><code><pre> // }</pre></code></td></tr><tr><td>399</td><td><code><pre></pre></code></td></tr><tr><td>400</td><td><code><pre> if payType == way[2] {</pre></code></td></tr><tr><td>401</td><td><code><pre> //app</pre></code></td></tr><tr><td>402</td><td><code><pre> uresp, err := u.TakeOrder(wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>403</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>404</td><td><code><pre> log.E("TakeOrder err:", err.Error())</pre></code></td></tr><tr><td>405</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>406</td><td><code><pre> }</pre></code></td></tr><tr><td>407</td><td><code><pre> returnJs, err := u.GenPayReq(wechatPay.GWxPayConfig, uresp.Prepay_id, ono)</pre></code></td></tr><tr><td>408</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>409</td><td><code><pre> log.E("GenPayReq err:", err.Error())</pre></code></td></tr><tr class="miss"><td>410</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>411</td><td><code><pre> }</pre></code></td></tr><tr><td>412</td><td><code><pre> return string(returnJs), nil</pre></code></td></tr><tr><td>413</td><td><code><pre> } else {</pre></code></td></tr><tr><td>414</td><td><code><pre> //native</pre></code></td></tr><tr><td>415</td><td><code><pre> uresp, err := u.TakeOrder(wechatPay.GWxNativePayConfig)</pre></code></td></tr><tr><td>416</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>417</td><td><code><pre> log.E("TakeOrder err:", err.Error())</pre></code></td></tr><tr><td>418</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>419</td><td><code><pre> }</pre></code></td></tr><tr><td>420</td><td><code><pre> data, err := orderQr.GenQr(uresp.Code_url, ono)</pre></code></td></tr><tr><td>421</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>422</td><td><code><pre> log.E("genQr err:%s", err.Error())</pre></code></td></tr><tr class="miss"><td>423</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>424</td><td><code><pre> }</pre></code></td></tr><tr><td>425</td><td><code><pre> return data, nil</pre></code></td></tr><tr><td>426</td><td><code><pre> }</pre></code></td></tr><tr><td>427</td><td><code><pre></pre></code></td></tr><tr><td>428</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_CheckPaidcb">func CheckPaidcb</div><div class="info"><a href="#s_fn_CheckPaidcb">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>877</td><td><code><pre>func CheckPaidcb(akey string) error {</pre></code></td></tr><tr><td>878</td><td><code><pre> paid_cb := ""</pre></code></td></tr><tr><td>879</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>880</td><td><code><pre> _sql := `select aval from ods_order_env where akey ='` + akey + `'`</pre></code></td></tr><tr><td>881</td><td><code><pre> log.D("%s", _sql)</pre></code></td></tr><tr><td>882</td><td><code><pre> if err := db.QueryRow(_sql).Scan(&paid_cb); err != nil {</pre></code></td></tr><tr class="miss"><td>883</td><td><code><pre> log.E("query aval err in ods_order_env")</pre></code></td></tr><tr class="miss"><td>884</td><td><code><pre> return err</pre></code></td></tr><tr><td>885</td><td><code><pre> }</pre></code></td></tr><tr><td>886</td><td><code><pre> return nil</pre></code></td></tr><tr><td>887</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_RandInt">func RandInt</div><div class="info"><a href="#s_fn_RandInt">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_mobile.go</code>:</p></div><table class="listing">
<tr><td>25</td><td><code><pre>func RandInt(min int, max int) int {</pre></code></td></tr><tr><td>26</td><td><code><pre> if max-min <= 0 {</pre></code></td></tr><tr class="miss"><td>27</td><td><code><pre> return min</pre></code></td></tr><tr><td>28</td><td><code><pre> }</pre></code></td></tr><tr><td>29</td><td><code><pre> rand.Seed(time.Now().UTC().UnixNano())</pre></code></td></tr><tr><td>30</td><td><code><pre> return min + rand.Intn(max-min)</pre></code></td></tr><tr><td>31</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_confirmAliPay">func confirmAliPay</div><div class="info"><a href="#s_fn_confirmAliPay">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderalipay/alipay_web.go</code>:</p></div><table class="listing">
<tr><td>366</td><td><code><pre>func confirmAliPay(payType string, r *alipay.AlipayWebRequest) (string, error) {</pre></code></td></tr><tr><td>367</td><td><code><pre> if payType == way[0] {</pre></code></td></tr><tr><td>368</td><td><code><pre> htm, err := alipay.AlipayRemoteRequestForm(alipay.AWebConfig, r)</pre></code></td></tr><tr><td>369</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>370</td><td><code><pre> log.E(err.Error())</pre></code></td></tr><tr class="miss"><td>371</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>372</td><td><code><pre> }</pre></code></td></tr><tr><td>373</td><td><code><pre> return htm, nil</pre></code></td></tr><tr><td>374</td><td><code><pre> } else if payType == way[1] {</pre></code></td></tr><tr><td>375</td><td><code><pre> orderinfo := alipay.AlipayMobileRsaSign(alipay.AlipayMobileRequest(*r), alipay.AMobileConfig)</pre></code></td></tr><tr><td>376</td><td><code><pre></pre></code></td></tr><tr><td>377</td><td><code><pre> fmt.Println("orderinfo", orderinfo)</pre></code></td></tr><tr><td>378</td><td><code><pre></pre></code></td></tr><tr><td>379</td><td><code><pre> orderInfoJson := map[string]interface{}{}</pre></code></td></tr><tr><td>380</td><td><code><pre> orderInfoJson["code"] = "0"</pre></code></td></tr><tr><td>381</td><td><code><pre> orderInfoJson["data"] = orderinfo</pre></code></td></tr><tr><td>382</td><td><code><pre> returnJs, err := json.Marshal(orderInfoJson)</pre></code></td></tr><tr><td>383</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>384</td><td><code><pre> log.E("json: ", err.Error())</pre></code></td></tr><tr class="miss"><td>385</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>386</td><td><code><pre> }</pre></code></td></tr><tr><td>387</td><td><code><pre> return string(returnJs), nil</pre></code></td></tr><tr><td>388</td><td><code><pre> }</pre></code></td></tr><tr class="miss"><td>389</td><td><code><pre> return "", errors.New("payType is not marry")</pre></code></td></tr><tr><td>390</td><td><code><pre>}</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:com.dy.order/orderalipay DONE:88.91
-->
<div id="pkg_com.dy.order/orderwxpay" class="funcname">Package Overview: com.dy.order/orderwxpay <span class="packageTotal">88.24%</span></div><p>This is a coverage report created after analysis of the <code>com.dy.order/orderwxpay</code> package. It
has been generated with the following command:</p><pre class="cmd">gocov test com.dy.order/orderwxpay | gocov-html</pre> <p>Here are the stats. Please select a function name to view its implementation and see what's left for testing.</p><table class="overview">
<tr id="s_fn_@211:8"><td><code><a href="#fn_@211:8">@211:8(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_navite_http.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_@251:8"><td><code><a href="#fn_@251:8">@251:8(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>4/4</code></td></tr>
<tr id="s_fn_InitWxConfig"><td><code><a href="#fn_InitWxConfig">InitWxConfig(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_config.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>3/3</code></td></tr>
<tr id="s_fn_IfWXPaySuccessFail"><td><code><a href="#fn_IfWXPaySuccessFail">IfWXPaySuccessFail(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>100.00%</code></td><td class="linecount"><code>2/2</code></td></tr>
<tr id="s_fn_WXpayPaySuccess"><td><code><a href="#fn_WXpayPaySuccess">WXpayPaySuccess(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>97.62%</code></td><td class="linecount"><code>41/42</code></td></tr>
<tr id="s_fn_WxPayMoblieNotify"><td><code><a href="#fn_WxPayMoblieNotify">WxPayMoblieNotify(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>91.30%</code></td><td class="linecount"><code>21/23</code></td></tr>
<tr id="s_fn_WxPayWebNotify"><td><code><a href="#fn_WxPayWebNotify">WxPayWebNotify(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_navite_http.go</code></td><td class="percent"><code>91.30%</code></td><td class="linecount"><code>21/23</code></td></tr>
<tr id="s_fn_WxMoblieRemoteCall"><td><code><a href="#fn_WxMoblieRemoteCall">WxMoblieRemoteCall(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>88.37%</code></td><td class="linecount"><code>38/43</code></td></tr>
<tr id="s_fn_DealWXOrder"><td><code><a href="#fn_DealWXOrder">DealWXOrder(...)</a></code></td><td><code>com.dy.order/orderwxpay/db.go</code></td><td class="percent"><code>84.31%</code></td><td class="linecount"><code>43/51</code></td></tr>
<tr id="s_fn_WxNativeRemoteCall"><td><code><a href="#fn_WxNativeRemoteCall">WxNativeRemoteCall(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_navite_http.go</code></td><td class="percent"><code>83.72%</code></td><td class="linecount"><code>36/43</code></td></tr>
<tr id="s_fn_@327:8"><td><code><a href="#fn_@327:8">@327:8(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>12/15</code></td></tr>
<tr id="s_fn_@323:8"><td><code><a href="#fn_@323:8">@323:8(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>80.00%</code></td><td class="linecount"><code>4/5</code></td></tr>
<tr id="s_fn_@293:5"><td><code><a href="#fn_@293:5">@293:5(...)</a></code></td><td><code>com.dy.order/orderwxpay/wxpay_App_http.go</code></td><td class="percent"><code>78.57%</code></td><td class="linecount"><code>11/14</code></td></tr>
<tr><td colspan="2"><code>com.dy.order/orderwxpay</code></td><td class="percent"><code>88.24%</code></td><td class="linecount"><code>240/272</code></td></tr>
</table>
<div class="funcname" id="fn_@211:8">func @211:8</div><div class="info"><a href="#s_fn_@211:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_navite_http.go</code>:</p></div><table class="listing">
<tr><td>211</td><td><code><pre>func() {</pre></code></td></tr><tr><td>212</td><td><code><pre> log.D("WxPayAppNotify End")</pre></code></td></tr><tr><td>213</td><td><code><pre> log.D("NotyfyCallback to WX : ", n.ToXML())</pre></code></td></tr><tr><td>214</td><td><code><pre> hs.W.Header().Set("Content-Type", "application/xml ")</pre></code></td></tr><tr><td>215</td><td><code><pre> fmt.Fprint(hs.W, n.ToXML())</pre></code></td></tr><tr><td>216</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@251:8">func @251:8</div><div class="info"><a href="#s_fn_@251:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>251</td><td><code><pre>func() {</pre></code></td></tr><tr><td>252</td><td><code><pre> log.D("WxPayAppNotify End")</pre></code></td></tr><tr><td>253</td><td><code><pre> log.D("NotyfyCallback to WX : ", n.ToXML())</pre></code></td></tr><tr><td>254</td><td><code><pre> hs.W.Header().Set("Content-Type", "application/xml ")</pre></code></td></tr><tr><td>255</td><td><code><pre> fmt.Fprint(hs.W, n.ToXML())</pre></code></td></tr><tr><td>256</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_InitWxConfig">func InitWxConfig</div><div class="info"><a href="#s_fn_InitWxConfig">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_config.go</code>:</p></div><table class="listing">
<tr><td>10</td><td><code><pre>func InitWxConfig() {</pre></code></td></tr><tr><td>11</td><td><code><pre> host := conf.Order_host()</pre></code></td></tr><tr><td>12</td><td><code><pre> wechatPay.GWxPayConfig.Notify_url = fmt.Sprintf("http://%v/wxpay-mobile-notify", host)</pre></code></td></tr><tr><td>13</td><td><code><pre> wechatPay.GWxNativePayConfig.Notify_url = fmt.Sprintf("http://%v/wxpay-native-notify", host)</pre></code></td></tr><tr><td>14</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_IfWXPaySuccessFail">func IfWXPaySuccessFail</div><div class="info"><a href="#s_fn_IfWXPaySuccessFail">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>290</td><td><code><pre>func IfWXPaySuccessFail(ono string, status string, transaction_id string) {</pre></code></td></tr><tr><td>291</td><td><code><pre> // conn = dbMgr.DbConn()</pre></code></td></tr><tr><td>292</td><td><code><pre> log.D("数据库出错,后续处理中")</pre></code></td></tr><tr><td>293</td><td><code><pre> go func() {</pre></code></td></tr><tr><td>294</td><td><code><pre> timer := time.NewTicker(15 * time.Second)</pre></code></td></tr><tr><td>295</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>296</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>297</td><td><code><pre> for {</pre></code></td></tr><tr><td>298</td><td><code><pre> select {</pre></code></td></tr><tr><td>299</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>300</td><td><code><pre> if i < 3 {</pre></code></td></tr><tr><td>301</td><td><code><pre> log.D("the %d times ccb wx fail", i)</pre></code></td></tr><tr><td>302</td><td><code><pre> i++</pre></code></td></tr><tr><td>303</td><td><code><pre> } else {</pre></code></td></tr><tr><td>304</td><td><code><pre> log.D("kill timer wx fail")</pre></code></td></tr><tr><td>305</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>306</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>307</td><td><code><pre> }</pre></code></td></tr><tr><td>308</td><td><code><pre> if bl, _ := WXpayPaySuccess(ono, status, transaction_id); bl {</pre></code></td></tr><tr><td>309</td><td><code><pre> log.D("success ccb wx fail")</pre></code></td></tr><tr><td>310</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>311</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>312</td><td><code><pre> }</pre></code></td></tr><tr><td>313</td><td><code><pre> }</pre></code></td></tr><tr><td>314</td><td><code><pre> }</pre></code></td></tr><tr><td>315</td><td><code><pre> }()</pre></code></td></tr><tr><td>316</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_WXpayPaySuccess">func WXpayPaySuccess</div><div class="info"><a href="#s_fn_WXpayPaySuccess">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>321</td><td><code><pre>func WXpayPaySuccess(ono string, status string, transaction_id string) (bool, error) {</pre></code></td></tr><tr><td>322</td><td><code><pre> callback := false</pre></code></td></tr><tr><td>323</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>324</td><td><code><pre> if callback == true {</pre></code></td></tr><tr><td>325</td><td><code><pre> if bl, _ := order.Callback(ono); bl != true {</pre></code></td></tr><tr><td>326</td><td><code><pre> log.D("callback=false")</pre></code></td></tr><tr><td>327</td><td><code><pre> go func(ono string) {</pre></code></td></tr><tr><td>328</td><td><code><pre> log.D("回调出错,后续处理中")</pre></code></td></tr><tr><td>329</td><td><code><pre> timer := time.NewTicker(3 * time.Second)</pre></code></td></tr><tr><td>330</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>331</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>332</td><td><code><pre> for {</pre></code></td></tr><tr><td>333</td><td><code><pre> select {</pre></code></td></tr><tr><td>334</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>335</td><td><code><pre> if i >= 5 {</pre></code></td></tr><tr><td>336</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>337</td><td><code><pre> log.D("kill timer wx")</pre></code></td></tr><tr><td>338</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>339</td><td><code><pre> } else {</pre></code></td></tr><tr><td>340</td><td><code><pre> log.D("the %d times ccb wx", i)</pre></code></td></tr><tr><td>341</td><td><code><pre> i++</pre></code></td></tr><tr><td>342</td><td><code><pre> }</pre></code></td></tr><tr><td>343</td><td><code><pre> if bl, _ := order.Callback(ono); bl {</pre></code></td></tr><tr><td>344</td><td><code><pre> log.D("success ccb wx")</pre></code></td></tr><tr><td>345</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>346</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>347</td><td><code><pre> }</pre></code></td></tr><tr><td>348</td><td><code><pre> }</pre></code></td></tr><tr><td>349</td><td><code><pre> }</pre></code></td></tr><tr><td>350</td><td><code><pre> }(ono)</pre></code></td></tr><tr><td>351</td><td><code><pre> } else {</pre></code></td></tr><tr><td>352</td><td><code><pre> log.D("callback=true")</pre></code></td></tr><tr><td>353</td><td><code><pre> }</pre></code></td></tr><tr><td>354</td><td><code><pre> }</pre></code></td></tr><tr><td>355</td><td><code><pre> }()</pre></code></td></tr><tr><td>356</td><td><code><pre></pre></code></td></tr><tr><td>357</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>358</td><td><code><pre> tx, _ := db.Begin()</pre></code></td></tr><tr><td>359</td><td><code><pre> var uid int64</pre></code></td></tr><tr><td>360</td><td><code><pre> var target_id int64</pre></code></td></tr><tr><td>361</td><td><code><pre> // var imoney float64</pre></code></td></tr><tr><td>362</td><td><code><pre> // var buyer int64</pre></code></td></tr><tr><td>363</td><td><code><pre> _sql := `select buyer,seller from ods_order o join ods_record r where r.ono=o.ono and r.ono =? order by r.tid asc`</pre></code></td></tr><tr><td>364</td><td><code><pre> err := tx.QueryRow(_sql, ono).Scan(&uid, &target_id)</pre></code></td></tr><tr><td>365</td><td><code><pre> //err1 := tx.QueryRow(_sql, ono).Scan(&target_id)</pre></code></td></tr><tr><td>366</td><td><code><pre> if err != nil /*|| err1 != nil*/ {</pre></code></td></tr><tr><td>367</td><td><code><pre> log.E("Query ods_record uid ,target_id error %v", err.Error())</pre></code></td></tr><tr><td>368</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>369</td><td><code><pre> return false, errors.New("Query record uid,target_id error")</pre></code></td></tr><tr><td>370</td><td><code><pre> }</pre></code></td></tr><tr><td>371</td><td><code><pre> if uid == 0 || target_id == 0 {</pre></code></td></tr><tr><td>372</td><td><code><pre> log.E("uid or target_id not exist")</pre></code></td></tr><tr><td>373</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>374</td><td><code><pre> return false, errors.New("uid or target not exist")</pre></code></td></tr><tr><td>375</td><td><code><pre> }</pre></code></td></tr><tr><td>376</td><td><code><pre></pre></code></td></tr><tr><td>377</td><td><code><pre> //integral 积分暂不支持</pre></code></td></tr><tr><td>378</td><td><code><pre> //_n_integral := ^js.Integral + 1</pre></code></td></tr><tr><td>379</td><td><code><pre> // _sql = `select r.money,o.buyer from ods_record r join ods_order o on r.uid=o.buyer and r.ono=o.ono where o.ono=? and r.pay_type='大洋币'`</pre></code></td></tr><tr><td>380</td><td><code><pre> // err = tx.QueryRow(_sql, ono).Scan(&imoney, &buyer)</pre></code></td></tr><tr><td>381</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>382</td><td><code><pre> // log.E("Query ods_record money error %v", err.Error())</pre></code></td></tr><tr><td>383</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>384</td><td><code><pre> // return false, errors.New("Query ods_record money error")</pre></code></td></tr><tr><td>385</td><td><code><pre> // }</pre></code></td></tr><tr><td>386</td><td><code><pre> // _n_integral := ^int64(imoney) + 1</pre></code></td></tr><tr><td>387</td><td><code><pre> // if bl, err := order.UpdateIntegral(tx, _n_integral, buyer); bl != true {</pre></code></td></tr><tr><td>388</td><td><code><pre> // log.E("UpdateIntegral: %v", err.Error())</pre></code></td></tr><tr><td>389</td><td><code><pre> // return false, err</pre></code></td></tr><tr><td>390</td><td><code><pre> // }</pre></code></td></tr><tr><td>391</td><td><code><pre> //buyer-->uid record</pre></code></td></tr><tr><td>392</td><td><code><pre> Type := "PAID"</pre></code></td></tr><tr><td>393</td><td><code><pre> sts := "PAID"</pre></code></td></tr><tr><td>394</td><td><code><pre> if bl, err := order.UpdateRecord(tx, Type, sts, uid, ono); bl != true {</pre></code></td></tr><tr><td>395</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>396</td><td><code><pre> }</pre></code></td></tr><tr><td>397</td><td><code><pre> //seller-->uid record</pre></code></td></tr><tr><td>398</td><td><code><pre> Type = "INCOME"</pre></code></td></tr><tr><td>399</td><td><code><pre> if bl, err := order.UpdateRecord(tx, Type, sts, target_id, ono); bl != true {</pre></code></td></tr><tr class="miss"><td>400</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>401</td><td><code><pre> }</pre></code></td></tr><tr><td>402</td><td><code><pre></pre></code></td></tr><tr><td>403</td><td><code><pre> _sql = `update ods_order set status=? where ono =?`</pre></code></td></tr><tr><td>404</td><td><code><pre> _, err = tx.Exec(_sql, status, ono)</pre></code></td></tr><tr><td>405</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>406</td><td><code><pre> log.E("Add ods_record error %v", err.Error())</pre></code></td></tr><tr><td>407</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>408</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>409</td><td><code><pre> }</pre></code></td></tr><tr><td>410</td><td><code><pre></pre></code></td></tr><tr><td>411</td><td><code><pre> _sql = `update ods_order set wno=? where ono =?`</pre></code></td></tr><tr><td>412</td><td><code><pre> _, err = tx.Exec(_sql, transaction_id, ono)</pre></code></td></tr><tr><td>413</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>414</td><td><code><pre> log.E("Add ods_record error %v", err.Error())</pre></code></td></tr><tr><td>415</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>416</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>417</td><td><code><pre> }</pre></code></td></tr><tr><td>418</td><td><code><pre></pre></code></td></tr><tr><td>419</td><td><code><pre> err = tx.Commit()</pre></code></td></tr><tr><td>420</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>421</td><td><code><pre> log.E("AlipayPaySuccess commit error %v", err.Error())</pre></code></td></tr><tr><td>422</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>423</td><td><code><pre> return false, err</pre></code></td></tr><tr><td>424</td><td><code><pre> }</pre></code></td></tr><tr><td>425</td><td><code><pre> callback = true</pre></code></td></tr><tr><td>426</td><td><code><pre> return true, nil</pre></code></td></tr><tr><td>427</td><td><code><pre></pre></code></td></tr><tr><td>428</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_WxPayMoblieNotify">func WxPayMoblieNotify</div><div class="info"><a href="#s_fn_WxPayMoblieNotify">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>246</td><td><code><pre>func WxPayMoblieNotify(hs *routing.HTTPSession) routing.HResult {</pre></code></td></tr><tr><td>247</td><td><code><pre> log.D("WxPayAppNotify Begin")</pre></code></td></tr><tr><td>248</td><td><code><pre></pre></code></td></tr><tr><td>249</td><td><code><pre> n := &wechatPay.NotyfyCallback{}</pre></code></td></tr><tr><td>250</td><td><code><pre> n.Return_code = "FAIL"</pre></code></td></tr><tr><td>251</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>252</td><td><code><pre> log.D("WxPayAppNotify End")</pre></code></td></tr><tr><td>253</td><td><code><pre> log.D("NotyfyCallback to WX : ", n.ToXML())</pre></code></td></tr><tr><td>254</td><td><code><pre> hs.W.Header().Set("Content-Type", "application/xml ")</pre></code></td></tr><tr><td>255</td><td><code><pre> fmt.Fprint(hs.W, n.ToXML())</pre></code></td></tr><tr><td>256</td><td><code><pre> }()</pre></code></td></tr><tr><td>257</td><td><code><pre></pre></code></td></tr><tr><td>258</td><td><code><pre> bodyByte, _ := ioutil.ReadAll(hs.R.Body)</pre></code></td></tr><tr><td>259</td><td><code><pre></pre></code></td></tr><tr><td>260</td><td><code><pre> u, sbool, err := wechatPay.NewNaviteNotify(bodyByte, wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>261</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>262</td><td><code><pre> log.E("解析微信请求错误 : ", err)</pre></code></td></tr><tr class="miss"><td>263</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>264</td><td><code><pre> }</pre></code></td></tr><tr><td>265</td><td><code><pre> if !sbool {</pre></code></td></tr><tr><td>266</td><td><code><pre> log.E("验证微信签名错误 : ", err)</pre></code></td></tr><tr><td>267</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>268</td><td><code><pre> }</pre></code></td></tr><tr><td>269</td><td><code><pre></pre></code></td></tr><tr><td>270</td><td><code><pre> status := "PAID"</pre></code></td></tr><tr><td>271</td><td><code><pre> log.D("trade_status is : %v ", u.Result_code)</pre></code></td></tr><tr><td>272</td><td><code><pre> log.D("total_fee is %v ", u.Total_fee)</pre></code></td></tr><tr><td>273</td><td><code><pre> log.D("Out_trade_no %v: ", u.Out_trade_no)</pre></code></td></tr><tr><td>274</td><td><code><pre> log.D("Transaction_id:", u.Transaction_id)</pre></code></td></tr><tr><td>275</td><td><code><pre></pre></code></td></tr><tr><td>276</td><td><code><pre> log.D("MOBILEPAY TRADE_SUCCESS,处理订单中...")</pre></code></td></tr><tr><td>277</td><td><code><pre> if bl, _ := WXpayPaySuccess(u.Out_trade_no, status, u.Transaction_id); bl != true {</pre></code></td></tr><tr><td>278</td><td><code><pre> IfWXPaySuccessFail(u.Out_trade_no, status, u.Transaction_id)</pre></code></td></tr><tr><td>279</td><td><code><pre> }</pre></code></td></tr><tr><td>280</td><td><code><pre></pre></code></td></tr><tr><td>281</td><td><code><pre> n.Return_code = "SUCCESS"</pre></code></td></tr><tr><td>282</td><td><code><pre> n.Return_msg = "OK"</pre></code></td></tr><tr><td>283</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>284</td><td><code><pre></pre></code></td></tr><tr><td>285</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_WxPayWebNotify">func WxPayWebNotify</div><div class="info"><a href="#s_fn_WxPayWebNotify">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_navite_http.go</code>:</p></div><table class="listing">
<tr><td>206</td><td><code><pre>func WxPayWebNotify(hs *routing.HTTPSession) routing.HResult {</pre></code></td></tr><tr><td>207</td><td><code><pre> log.D("WxPayWebNotify Begin")</pre></code></td></tr><tr><td>208</td><td><code><pre></pre></code></td></tr><tr><td>209</td><td><code><pre> n := &wechatPay.NotyfyCallback{}</pre></code></td></tr><tr><td>210</td><td><code><pre> n.Return_code = "FAIL"</pre></code></td></tr><tr><td>211</td><td><code><pre> defer func() {</pre></code></td></tr><tr><td>212</td><td><code><pre> log.D("WxPayAppNotify End")</pre></code></td></tr><tr><td>213</td><td><code><pre> log.D("NotyfyCallback to WX : ", n.ToXML())</pre></code></td></tr><tr><td>214</td><td><code><pre> hs.W.Header().Set("Content-Type", "application/xml ")</pre></code></td></tr><tr><td>215</td><td><code><pre> fmt.Fprint(hs.W, n.ToXML())</pre></code></td></tr><tr><td>216</td><td><code><pre> }()</pre></code></td></tr><tr><td>217</td><td><code><pre></pre></code></td></tr><tr><td>218</td><td><code><pre> bodyByte, _ := ioutil.ReadAll(hs.R.Body)</pre></code></td></tr><tr><td>219</td><td><code><pre> u, sbool, err := wechatPay.NewNaviteNotify(bodyByte, wechatPay.GWxNativePayConfig)</pre></code></td></tr><tr><td>220</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>221</td><td><code><pre> log.E("解析微信请求错误 : ", err)</pre></code></td></tr><tr class="miss"><td>222</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>223</td><td><code><pre> }</pre></code></td></tr><tr><td>224</td><td><code><pre> if !sbool {</pre></code></td></tr><tr><td>225</td><td><code><pre> log.E("验证微信签名错误 : ", err)</pre></code></td></tr><tr><td>226</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>227</td><td><code><pre> }</pre></code></td></tr><tr><td>228</td><td><code><pre></pre></code></td></tr><tr><td>229</td><td><code><pre> status := "PAID"</pre></code></td></tr><tr><td>230</td><td><code><pre> log.D("trade_status is : %v ", u.Result_code)</pre></code></td></tr><tr><td>231</td><td><code><pre> log.D("total_fee is %v ", u.Total_fee)</pre></code></td></tr><tr><td>232</td><td><code><pre> log.D("Out_trade_no %v: ", u.Out_trade_no)</pre></code></td></tr><tr><td>233</td><td><code><pre> log.D("Transaction_id:", u.Transaction_id)</pre></code></td></tr><tr><td>234</td><td><code><pre></pre></code></td></tr><tr><td>235</td><td><code><pre> log.D("MOBILEPAY TRADE_SUCCESS,处理订单中...")</pre></code></td></tr><tr><td>236</td><td><code><pre> if bl, _ := WXpayPaySuccess(u.Out_trade_no, status, u.Transaction_id); bl != true {</pre></code></td></tr><tr><td>237</td><td><code><pre> IfWXPaySuccessFail(u.Out_trade_no, status, u.Transaction_id)</pre></code></td></tr><tr><td>238</td><td><code><pre> }</pre></code></td></tr><tr><td>239</td><td><code><pre></pre></code></td></tr><tr><td>240</td><td><code><pre> n.Return_code = "SUCCESS"</pre></code></td></tr><tr><td>241</td><td><code><pre> n.Return_msg = "OK"</pre></code></td></tr><tr><td>242</td><td><code><pre> return routing.HRES_RETURN</pre></code></td></tr><tr><td>243</td><td><code><pre></pre></code></td></tr><tr><td>244</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_WxMoblieRemoteCall">func WxMoblieRemoteCall</div><div class="info"><a href="#s_fn_WxMoblieRemoteCall">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>134</td><td><code><pre>func WxMoblieRemoteCall(req string) (string, error) {</pre></code></td></tr><tr><td>135</td><td><code><pre></pre></code></td></tr><tr><td>136</td><td><code><pre> var err error</pre></code></td></tr><tr><td>137</td><td><code><pre></pre></code></td></tr><tr><td>138</td><td><code><pre> log.D("begin WxMoblieRemoteCall remote request", "heheda")</pre></code></td></tr><tr><td>139</td><td><code><pre> fmt.Printf("req:%s\n", []byte(req))</pre></code></td></tr><tr><td>140</td><td><code><pre> var js WXRemoteReqStruct</pre></code></td></tr><tr><td>141</td><td><code><pre> err = json.Unmarshal([]byte(req), &js)</pre></code></td></tr><tr><td>142</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>143</td><td><code><pre> log.E("format err")</pre></code></td></tr><tr><td>144</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>145</td><td><code><pre> }</pre></code></td></tr><tr><td>146</td><td><code><pre> fmt.Printf("js:%s\n", js)</pre></code></td></tr><tr><td>147</td><td><code><pre></pre></code></td></tr><tr><td>148</td><td><code><pre> if err := order.CheckParas(order.CommonRemoteReqStruct(js)); err != nil {</pre></code></td></tr><tr><td>149</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>150</td><td><code><pre> }</pre></code></td></tr><tr><td>151</td><td><code><pre></pre></code></td></tr><tr><td>152</td><td><code><pre> //detect integral</pre></code></td></tr><tr><td>153</td><td><code><pre> if err = order.DetectIntegral(common.DbConn(), js.Integral, js.Buyer, js.TotalFee); err != nil {</pre></code></td></tr><tr><td>154</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>155</td><td><code><pre> }</pre></code></td></tr><tr><td>156</td><td><code><pre> //conv totalfee</pre></code></td></tr><tr><td>157</td><td><code><pre> log.D("integral:%f,%f", js.TotalFee, float64(js.Integral)/100.0)</pre></code></td></tr><tr><td>158</td><td><code><pre> _integral := float64(js.Integral) / 100.0</pre></code></td></tr><tr><td>159</td><td><code><pre> _needpay := js.TotalFee - _integral</pre></code></td></tr><tr><td>160</td><td><code><pre> s := fmt.Sprintf("%.2f", _needpay)</pre></code></td></tr><tr><td>161</td><td><code><pre> i, err := strconv.ParseFloat(s, 64)</pre></code></td></tr><tr><td>162</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>163</td><td><code><pre> return "", errors.New("TotalFee err")</pre></code></td></tr><tr><td>164</td><td><code><pre> }</pre></code></td></tr><tr><td>165</td><td><code><pre></pre></code></td></tr><tr><td>166</td><td><code><pre> u := wechatPay.NewUnifiedorder(wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>167</td><td><code><pre> // 随机字符串</pre></code></td></tr><tr><td>168</td><td><code><pre> u.Nonce_str = wechatPay.Md5String(wechatPay.NewOrderNo())</pre></code></td></tr><tr><td>169</td><td><code><pre> // 商品描述</pre></code></td></tr><tr><td>170</td><td><code><pre> u.Body = js.Subject</pre></code></td></tr><tr><td>171</td><td><code><pre> // 商户订单号</pre></code></td></tr><tr><td>172</td><td><code><pre> u.Out_trade_no = wechatPay.NewOrderNo()</pre></code></td></tr><tr><td>173</td><td><code><pre> // 总金额</pre></code></td></tr><tr><td>174</td><td><code><pre> u.Total_fee = fmt.Sprintf("%d", int(i*100))</pre></code></td></tr><tr><td>175</td><td><code><pre> // 终端IP</pre></code></td></tr><tr><td>176</td><td><code><pre> u.Spbill_create_ip = "127.0.0.1"</pre></code></td></tr><tr><td>177</td><td><code><pre> // 交易类型 JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 MICROPAY--刷卡支付</pre></code></td></tr><tr><td>178</td><td><code><pre> u.Trade_type = "APP"</pre></code></td></tr><tr><td>179</td><td><code><pre> //detail</pre></code></td></tr><tr><td>180</td><td><code><pre> u.Detail = js.Body</pre></code></td></tr><tr><td>181</td><td><code><pre> //js.Ono = u.Out_trade_no</pre></code></td></tr><tr><td>182</td><td><code><pre> fmt.Printf("Total_fee:%s\n", u.Total_fee)</pre></code></td></tr><tr><td>183</td><td><code><pre></pre></code></td></tr><tr><td>184</td><td><code><pre> //sync uap</pre></code></td></tr><tr><td>185</td><td><code><pre> // if err := order.SynUser(js.Seller, js.Buyer); err != nil {</pre></code></td></tr><tr><td>186</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>187</td><td><code><pre> // }</pre></code></td></tr><tr><td>188</td><td><code><pre> if js.TotalFee < 0 || (js.TotalFee == 0 && js.Integral == 0) {</pre></code></td></tr><tr><td>189</td><td><code><pre> return "", errors.New("invalid total_fee")</pre></code></td></tr><tr><td>190</td><td><code><pre> }</pre></code></td></tr><tr><td>191</td><td><code><pre></pre></code></td></tr><tr><td>192</td><td><code><pre> //全积分暂不支持</pre></code></td></tr><tr><td>193</td><td><code><pre> uresp, err := u.TakeOrder(wechatPay.GWxPayConfig)</pre></code></td></tr><tr><td>194</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>195</td><td><code><pre> log.E("TakeOrder err:", err.Error())</pre></code></td></tr><tr class="miss"><td>196</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>197</td><td><code><pre> }</pre></code></td></tr><tr><td>198</td><td><code><pre></pre></code></td></tr><tr><td>199</td><td><code><pre> if _, err := DealWXOrder(js, u.Out_trade_no, uresp.Prepay_id); err != nil {</pre></code></td></tr><tr><td>200</td><td><code><pre> log.E("DealWXOrder err:", err.Error())</pre></code></td></tr><tr><td>201</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>202</td><td><code><pre> }</pre></code></td></tr><tr><td>203</td><td><code><pre> //app</pre></code></td></tr><tr><td>204</td><td><code><pre> returnJs, err := u.GenPayReq(wechatPay.GWxPayConfig, uresp.Prepay_id, u.Out_trade_no)</pre></code></td></tr><tr><td>205</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>206</td><td><code><pre> log.E("GenPayReq err:", err.Error())</pre></code></td></tr><tr class="miss"><td>207</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>208</td><td><code><pre> }</pre></code></td></tr><tr><td>209</td><td><code><pre> return string(returnJs), nil</pre></code></td></tr><tr><td>210</td><td><code><pre></pre></code></td></tr><tr><td>211</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_DealWXOrder">func DealWXOrder</div><div class="info"><a href="#s_fn_DealWXOrder">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/db.go</code>:</p></div><table class="listing">
<tr><td>13</td><td><code><pre>func DealWXOrder(js WXRemoteReqStruct, ono, prepayId string) (string, error) {</pre></code></td></tr><tr><td>14</td><td><code><pre></pre></code></td></tr><tr><td>15</td><td><code><pre> //sync uap</pre></code></td></tr><tr><td>16</td><td><code><pre> if err := order.SynUser(js.Seller, js.Buyer); err != nil {</pre></code></td></tr><tr><td>17</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>18</td><td><code><pre> }</pre></code></td></tr><tr><td>19</td><td><code><pre> if prepayId == "" {</pre></code></td></tr><tr><td>20</td><td><code><pre> return "", errors.New("prepayId nil")</pre></code></td></tr><tr><td>21</td><td><code><pre> }</pre></code></td></tr><tr><td>22</td><td><code><pre> db := common.DbConn()</pre></code></td></tr><tr><td>23</td><td><code><pre> tx, err := db.Begin()</pre></code></td></tr><tr><td>24</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>25</td><td><code><pre> fmt.Printf("start a transaction err,%s\n", err.Error())</pre></code></td></tr><tr class="miss"><td>26</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>27</td><td><code><pre> }</pre></code></td></tr><tr><td>28</td><td><code><pre> //isOnoExist, isExistErr := order.CheckIsExist(db, js.Ono, 0, "ods_order")</pre></code></td></tr><tr><td>29</td><td><code><pre> isOnoExist, _ := order.CheckIsExist(db, js.Ono, 0, "ods_order")</pre></code></td></tr><tr><td>30</td><td><code><pre> //integral 假定1==1分</pre></code></td></tr><tr><td>31</td><td><code><pre> _, _needpay, _payway := order.PayTypeAndNeedPay(js.Integral, js.TotalFee)</pre></code></td></tr><tr><td>32</td><td><code><pre> // _integral := float64(js.Integral) / 100.0</pre></code></td></tr><tr><td>33</td><td><code><pre> // _needpay := js.TotalFee - _integral</pre></code></td></tr><tr><td>34</td><td><code><pre> // _payway := 0 //0:正常支付 1:有积分有💰 2:全积分</pre></code></td></tr><tr><td>35</td><td><code><pre> // js.TotalFee = _needpay</pre></code></td></tr><tr><td>36</td><td><code><pre> // if 0 == _needpay {</pre></code></td></tr><tr><td>37</td><td><code><pre> // _payway = 2</pre></code></td></tr><tr><td>38</td><td><code><pre> // } else if _needpay > 0 && js.Integral > 0 {</pre></code></td></tr><tr><td>39</td><td><code><pre> // _payway = 1</pre></code></td></tr><tr><td>40</td><td><code><pre> // }</pre></code></td></tr><tr><td>41</td><td><code><pre> log.D("_payway:%v", _payway)</pre></code></td></tr><tr><td>42</td><td><code><pre> //======以后会有refund 请勿删除=====</pre></code></td></tr><tr><td>43</td><td><code><pre> // OrderType := js.Type</pre></code></td></tr><tr><td>44</td><td><code><pre> // if OrderType == "REFUND" || OrderType == "refund" {</pre></code></td></tr><tr><td>45</td><td><code><pre> // log.D("Type Refund")</pre></code></td></tr><tr><td>46</td><td><code><pre> // if js.Ono == "" {</pre></code></td></tr><tr><td>47</td><td><code><pre> // log.E("Ono is nil")</pre></code></td></tr><tr><td>48</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>49</td><td><code><pre> // return "", errors.New("Ono is nil")</pre></code></td></tr><tr><td>50</td><td><code><pre> // }</pre></code></td></tr><tr><td>51</td><td><code><pre> // if isOnoExist != true {</pre></code></td></tr><tr><td>52</td><td><code><pre> // log.E("Ono is not exist in db")</pre></code></td></tr><tr><td>53</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>54</td><td><code><pre> // return "", errors.New("ono is not exist:" + isExistErr.Error())</pre></code></td></tr><tr><td>55</td><td><code><pre> // }</pre></code></td></tr><tr><td>56</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>57</td><td><code><pre> // if bl, _ := order.CheckIsExist(db, js.Ono, js.OrderItem[i].P_id, "ods_order_item"); bl != true {</pre></code></td></tr><tr><td>58</td><td><code><pre> // log.E("ono or oid is not exist in order_item")</pre></code></td></tr><tr><td>59</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>60</td><td><code><pre> // return "", errors.New("ono or oid is not exist in order_item")</pre></code></td></tr><tr><td>61</td><td><code><pre> // }</pre></code></td></tr><tr><td>62</td><td><code><pre> // }</pre></code></td></tr><tr><td>63</td><td><code><pre> // //更改order_item</pre></code></td></tr><tr><td>64</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>65</td><td><code><pre> // _sql := `update ods_order_item set type ='REFUNG' where ono=? and p_id=?`</pre></code></td></tr><tr><td>66</td><td><code><pre> // _, err = tx.Exec(_sql, js.OrderItem[i].Ono, js.OrderItem[i].P_id)</pre></code></td></tr><tr><td>67</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>68</td><td><code><pre> // log.E("exec order_item refund err")</pre></code></td></tr><tr><td>69</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>70</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>71</td><td><code><pre> // }</pre></code></td></tr><tr><td>72</td><td><code><pre> // }</pre></code></td></tr><tr><td>73</td><td><code><pre></pre></code></td></tr><tr><td>74</td><td><code><pre> // //insert refund</pre></code></td></tr><tr><td>75</td><td><code><pre> // for i := 0; i < len(js.OrderRefund); i++ {</pre></code></td></tr><tr><td>76</td><td><code><pre> // _sql := `insert into ods_order_refund(ono,item,content,imgs,status) value(?,?,?,?,?)`</pre></code></td></tr><tr><td>77</td><td><code><pre> // _, err = tx.Exec(_sql, js.OrderRefund[i].Ono, js.OrderRefund[i].Item, js.OrderRefund[i].Imgs, js.OrderRefund[i].Status)</pre></code></td></tr><tr><td>78</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>79</td><td><code><pre> // log.E("Add OrderItem error %v", err.Error())</pre></code></td></tr><tr><td>80</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>81</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>82</td><td><code><pre> // }</pre></code></td></tr><tr><td>83</td><td><code><pre> // }</pre></code></td></tr><tr><td>84</td><td><code><pre> // //record</pre></code></td></tr><tr><td>85</td><td><code><pre> // //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>86</td><td><code><pre> // if bl, err := order.InsertRecord(tx, js.Subject, "REFUND", js.TotalFee, js.Buyer, "ALIPAY", js.Seller, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>87</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>88</td><td><code><pre> // }</pre></code></td></tr><tr><td>89</td><td><code><pre> // //uid-->seller target_id-->buyer</pre></code></td></tr><tr><td>90</td><td><code><pre> // if bl, err := order.InsertRecord(tx, js.Subject, "REFUND", js.TotalFee, js.Seller, "ALIPAY", js.Buyer, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>91</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>92</td><td><code><pre> // }</pre></code></td></tr><tr><td>93</td><td><code><pre></pre></code></td></tr><tr><td>94</td><td><code><pre> // } else {</pre></code></td></tr><tr><td>95</td><td><code><pre> log.D("Type N")</pre></code></td></tr><tr><td>96</td><td><code><pre> if js.TotalFee < 0 || (js.TotalFee == 0 && js.Integral == 0) {</pre></code></td></tr><tr><td>97</td><td><code><pre> log.E("消费金额<=0:%v", js.TotalFee)</pre></code></td></tr><tr><td>98</td><td><code><pre> return "", errors.New("TotalFee error")</pre></code></td></tr><tr><td>99</td><td><code><pre> }</pre></code></td></tr><tr><td>100</td><td><code><pre> //同一订单</pre></code></td></tr><tr><td>101</td><td><code><pre> if !isOnoExist {</pre></code></td></tr><tr><td>102</td><td><code><pre> //insert item</pre></code></td></tr><tr><td>103</td><td><code><pre> log.D("length orderItem:%d", len(js.OrderItem))</pre></code></td></tr><tr><td>104</td><td><code><pre> log.D("%v", js.OrderItem)</pre></code></td></tr><tr><td>105</td><td><code><pre> if len(js.OrderItem) < 1 {</pre></code></td></tr><tr><td>106</td><td><code><pre> log.E("OrderItem is nil")</pre></code></td></tr><tr><td>107</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>108</td><td><code><pre> return "", errors.New("OrderItem is nil")</pre></code></td></tr><tr><td>109</td><td><code><pre> }</pre></code></td></tr><tr><td>110</td><td><code><pre></pre></code></td></tr><tr><td>111</td><td><code><pre> //detect paid_cb</pre></code></td></tr><tr><td>112</td><td><code><pre> if err := order.CheckPaidcb(js.OrderItem[0].P_from); err != nil {</pre></code></td></tr><tr class="miss"><td>113</td><td><code><pre> log.E("p_from err")</pre></code></td></tr><tr class="miss"><td>114</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>115</td><td><code><pre> return "", errors.New("p_from err")</pre></code></td></tr><tr><td>116</td><td><code><pre> }</pre></code></td></tr><tr><td>117</td><td><code><pre></pre></code></td></tr><tr><td>118</td><td><code><pre> if err := order.InsertOrderItem(tx, order.CommonRemoteReqStruct(js), ono); err != nil {</pre></code></td></tr><tr><td>119</td><td><code><pre> log.E("InsertOrderItem err:%v", err.Error())</pre></code></td></tr><tr><td>120</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre></pre></code></td></tr><tr><td>123</td><td><code><pre> // for i := 0; i < len(js.OrderItem); i++ {</pre></code></td></tr><tr><td>124</td><td><code><pre> // _sql := `insert into ods_order_item(ono,oid,p_name,p_id,p_type,p_img,p_count,p_from,notified,price,type,status) value(?,?,?,?,?,?,?,?,?,?,?,?)`</pre></code></td></tr><tr><td>125</td><td><code><pre> // _, err = tx.Exec(_sql, ono, js.OrderItem[i].Oid, js.OrderItem[i].P_name, js.OrderItem[i].P_id, js.OrderItem[i].P_type, js.OrderItem[i].P_img, js.OrderItem[i].P_count, js.OrderItem[i].P_from, js.OrderItem[i].Notified, js.OrderItem[i].Price, js.Type, js.OrderItem[i].Status)</pre></code></td></tr><tr><td>126</td><td><code><pre> // if err != nil {</pre></code></td></tr><tr><td>127</td><td><code><pre> // log.E("Add OrderItem error %v", err.Error())</pre></code></td></tr><tr><td>128</td><td><code><pre> // tx.Rollback()</pre></code></td></tr><tr><td>129</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>130</td><td><code><pre> // }</pre></code></td></tr><tr><td>131</td><td><code><pre> // }</pre></code></td></tr><tr><td>132</td><td><code><pre> //_payway 0:正常支付 1:有积分有💰 2:全积分</pre></code></td></tr><tr><td>133</td><td><code><pre> if 2 == _payway || 1 == _payway {</pre></code></td></tr><tr><td>134</td><td><code><pre> //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>135</td><td><code><pre> if err := order.InsertWithIntegral(tx, order.CommonRemoteReqStruct(js), ono); err != nil {</pre></code></td></tr><tr><td>136</td><td><code><pre> log.E("InsertWithIntegral: %v", err.Error())</pre></code></td></tr><tr><td>137</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>138</td><td><code><pre> }</pre></code></td></tr><tr><td>139</td><td><code><pre> }</pre></code></td></tr><tr><td>140</td><td><code><pre> if 0 == _payway || 1 == _payway {</pre></code></td></tr><tr><td>141</td><td><code><pre> //record</pre></code></td></tr><tr><td>142</td><td><code><pre> //uid-->buyer target_id-->seller</pre></code></td></tr><tr><td>143</td><td><code><pre> // if bl, err := order.InsertRecord(tx, js.Subject, "INCOME", _needpay, js.Buyer, "WXPAY", js.Seller, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>144</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>145</td><td><code><pre> // }</pre></code></td></tr><tr><td>146</td><td><code><pre> // //uid-->seller target_id-->buyer</pre></code></td></tr><tr><td>147</td><td><code><pre> // if bl, err := order.InsertRecord(tx, js.Subject, "PAY", _needpay, js.Seller, "WXPAY", js.Buyer, "USER", ono, "NOT_PAY"); bl != true {</pre></code></td></tr><tr><td>148</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>149</td><td><code><pre> // }</pre></code></td></tr><tr><td>150</td><td><code><pre></pre></code></td></tr><tr><td>151</td><td><code><pre> if err := order.InsertWithRMB(tx, order.CommonRemoteReqStruct(js), ono, _needpay, "WXPAY"); err != nil {</pre></code></td></tr><tr><td>152</td><td><code><pre> log.E("InsertWithRMB: %v", err.Error())</pre></code></td></tr><tr><td>153</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>154</td><td><code><pre> }</pre></code></td></tr><tr><td>155</td><td><code><pre> }</pre></code></td></tr><tr><td>156</td><td><code><pre> }</pre></code></td></tr><tr><td>157</td><td><code><pre> // }</pre></code></td></tr><tr><td>158</td><td><code><pre> //insert order</pre></code></td></tr><tr><td>159</td><td><code><pre> // status := "NOT_PAY"</pre></code></td></tr><tr><td>160</td><td><code><pre> if !isOnoExist {</pre></code></td></tr><tr><td>161</td><td><code><pre> _sql := `insert into ods_order(ono,buyer,seller,total_price,type,status,return_url,expand,wno) value(?,?,?,?,?,?,?,?,?)`</pre></code></td></tr><tr><td>162</td><td><code><pre> _, err = tx.Exec(_sql, ono, js.Buyer, js.Seller, js.TotalFee, js.Type, js.Status, js.Return_url, js.Expand, prepayId)</pre></code></td></tr><tr><td>163</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>164</td><td><code><pre> log.E("Add Order error %v", err.Error())</pre></code></td></tr><tr><td>165</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr><td>166</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>167</td><td><code><pre> }</pre></code></td></tr><tr><td>168</td><td><code><pre> }</pre></code></td></tr><tr><td>169</td><td><code><pre> err = tx.Commit()</pre></code></td></tr><tr><td>170</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>171</td><td><code><pre> log.E("AddOrder commit error %v", err.Error())</pre></code></td></tr><tr class="miss"><td>172</td><td><code><pre> tx.Rollback()</pre></code></td></tr><tr class="miss"><td>173</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>174</td><td><code><pre> }</pre></code></td></tr><tr><td>175</td><td><code><pre> return "", nil</pre></code></td></tr><tr><td>176</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_WxNativeRemoteCall">func WxNativeRemoteCall</div><div class="info"><a href="#s_fn_WxNativeRemoteCall">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_navite_http.go</code>:</p></div><table class="listing">
<tr><td>92</td><td><code><pre>func WxNativeRemoteCall(req string) (string, error) {</pre></code></td></tr><tr><td>93</td><td><code><pre></pre></code></td></tr><tr><td>94</td><td><code><pre> var err error</pre></code></td></tr><tr><td>95</td><td><code><pre></pre></code></td></tr><tr><td>96</td><td><code><pre> log.D("begin WxNativeRemoteCall remote request")</pre></code></td></tr><tr><td>97</td><td><code><pre> fmt.Printf("req:%s\n", []byte(req))</pre></code></td></tr><tr><td>98</td><td><code><pre> var js WXRemoteReqStruct</pre></code></td></tr><tr><td>99</td><td><code><pre> err = json.Unmarshal([]byte(req), &js)</pre></code></td></tr><tr><td>100</td><td><code><pre> if err != nil {</pre></code></td></tr><tr><td>101</td><td><code><pre> log.E("format err")</pre></code></td></tr><tr><td>102</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>103</td><td><code><pre> }</pre></code></td></tr><tr><td>104</td><td><code><pre> fmt.Printf("js:%s\n", js)</pre></code></td></tr><tr><td>105</td><td><code><pre></pre></code></td></tr><tr><td>106</td><td><code><pre> if err := order.CheckParas(order.CommonRemoteReqStruct(js)); err != nil {</pre></code></td></tr><tr><td>107</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>108</td><td><code><pre> }</pre></code></td></tr><tr><td>109</td><td><code><pre></pre></code></td></tr><tr><td>110</td><td><code><pre> //detect integral</pre></code></td></tr><tr><td>111</td><td><code><pre> if err = order.DetectIntegral(common.DbConn(), js.Integral, js.Buyer, js.TotalFee); err != nil {</pre></code></td></tr><tr><td>112</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>113</td><td><code><pre> }</pre></code></td></tr><tr><td>114</td><td><code><pre> log.D("integral:%f,%f", js.TotalFee, float64(js.Integral)/100.0)</pre></code></td></tr><tr><td>115</td><td><code><pre> _integral := float64(js.Integral) / 100.0</pre></code></td></tr><tr><td>116</td><td><code><pre> _needpay := js.TotalFee - _integral</pre></code></td></tr><tr><td>117</td><td><code><pre> s := fmt.Sprintf("%.2f", _needpay)</pre></code></td></tr><tr><td>118</td><td><code><pre> i, err := strconv.ParseFloat(s, 64)</pre></code></td></tr><tr><td>119</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>120</td><td><code><pre> return "", errors.New("TotalFee err")</pre></code></td></tr><tr><td>121</td><td><code><pre> }</pre></code></td></tr><tr><td>122</td><td><code><pre></pre></code></td></tr><tr><td>123</td><td><code><pre> u := wechatPay.NewUnifiedorder(wechatPay.GWxNativePayConfig)</pre></code></td></tr><tr><td>124</td><td><code><pre> // 随机字符串</pre></code></td></tr><tr><td>125</td><td><code><pre> u.Nonce_str = wechatPay.Md5String(wechatPay.NewOrderNo())</pre></code></td></tr><tr><td>126</td><td><code><pre> // 商品描述</pre></code></td></tr><tr><td>127</td><td><code><pre> u.Body = js.Subject</pre></code></td></tr><tr><td>128</td><td><code><pre> // 商户订单号</pre></code></td></tr><tr><td>129</td><td><code><pre> u.Out_trade_no = wechatPay.NewOrderNo()</pre></code></td></tr><tr><td>130</td><td><code><pre> // // 总金额</pre></code></td></tr><tr><td>131</td><td><code><pre> u.Total_fee = fmt.Sprintf("%d", int(i*100))</pre></code></td></tr><tr><td>132</td><td><code><pre> // // 终端IP</pre></code></td></tr><tr><td>133</td><td><code><pre> u.Spbill_create_ip = "127.0.0.1"</pre></code></td></tr><tr><td>134</td><td><code><pre> // // 交易类型 JSAPI--公众号支付、NATIVE--原生扫码支付、APP--app支付 MICROPAY--刷卡支付</pre></code></td></tr><tr><td>135</td><td><code><pre> u.Trade_type = "NATIVE"</pre></code></td></tr><tr><td>136</td><td><code><pre> // // 商品ID</pre></code></td></tr><tr><td>137</td><td><code><pre> //u.Product_id = "123456"</pre></code></td></tr><tr><td>138</td><td><code><pre> // //detail</pre></code></td></tr><tr><td>139</td><td><code><pre> u.Detail = js.Body</pre></code></td></tr><tr><td>140</td><td><code><pre> //u.Device_info = "123456"</pre></code></td></tr><tr><td>141</td><td><code><pre> // //js.Ono = u.Out_trade_no</pre></code></td></tr><tr><td>142</td><td><code><pre> fmt.Printf("Total_fee:%s\n", u.Total_fee)</pre></code></td></tr><tr><td>143</td><td><code><pre></pre></code></td></tr><tr><td>144</td><td><code><pre> //sync uap</pre></code></td></tr><tr><td>145</td><td><code><pre> // if err := order.SynUser(js.Seller, js.Buyer); err != nil {</pre></code></td></tr><tr><td>146</td><td><code><pre> // return "", err</pre></code></td></tr><tr><td>147</td><td><code><pre> // }</pre></code></td></tr><tr><td>148</td><td><code><pre> //预先检测</pre></code></td></tr><tr><td>149</td><td><code><pre> if js.TotalFee < 0 || (js.TotalFee == 0 && js.Integral == 0) {</pre></code></td></tr><tr><td>150</td><td><code><pre> return "", errors.New("invalid total_fee")</pre></code></td></tr><tr><td>151</td><td><code><pre> }</pre></code></td></tr><tr><td>152</td><td><code><pre></pre></code></td></tr><tr><td>153</td><td><code><pre> //全积分暂不支持</pre></code></td></tr><tr><td>154</td><td><code><pre> uresp, err := u.TakeOrder(wechatPay.GWxNativePayConfig)</pre></code></td></tr><tr><td>155</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>156</td><td><code><pre> log.E("TakeOrder err:", err.Error())</pre></code></td></tr><tr class="miss"><td>157</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>158</td><td><code><pre> }</pre></code></td></tr><tr><td>159</td><td><code><pre></pre></code></td></tr><tr><td>160</td><td><code><pre> if _, err := DealWXOrder(js, u.Out_trade_no, uresp.Prepay_id); err != nil {</pre></code></td></tr><tr class="miss"><td>161</td><td><code><pre> log.E("DealWXOrder err:", err.Error())</pre></code></td></tr><tr class="miss"><td>162</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>163</td><td><code><pre> }</pre></code></td></tr><tr><td>164</td><td><code><pre></pre></code></td></tr><tr><td>165</td><td><code><pre> //qr gen</pre></code></td></tr><tr><td>166</td><td><code><pre> data, err := orderQr.GenQr(uresp.Code_url, u.Out_trade_no)</pre></code></td></tr><tr><td>167</td><td><code><pre> if err != nil {</pre></code></td></tr><tr class="miss"><td>168</td><td><code><pre> log.E("genQr err:%s", err.Error())</pre></code></td></tr><tr class="miss"><td>169</td><td><code><pre> return "", err</pre></code></td></tr><tr><td>170</td><td><code><pre> }</pre></code></td></tr><tr><td>171</td><td><code><pre></pre></code></td></tr><tr><td>172</td><td><code><pre> return data, nil</pre></code></td></tr><tr><td>173</td><td><code><pre></pre></code></td></tr><tr><td>174</td><td><code><pre>}</pre></code></td></tr></table>
<div class="funcname" id="fn_@327:8">func @327:8</div><div class="info"><a href="#s_fn_@327:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>327</td><td><code><pre>func(ono string) {</pre></code></td></tr><tr><td>328</td><td><code><pre> log.D("回调出错,后续处理中")</pre></code></td></tr><tr><td>329</td><td><code><pre> timer := time.NewTicker(3 * time.Second)</pre></code></td></tr><tr><td>330</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>331</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>332</td><td><code><pre> for {</pre></code></td></tr><tr><td>333</td><td><code><pre> select {</pre></code></td></tr><tr><td>334</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>335</td><td><code><pre> if i >= 5 {</pre></code></td></tr><tr><td>336</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>337</td><td><code><pre> log.D("kill timer wx")</pre></code></td></tr><tr><td>338</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>339</td><td><code><pre> } else {</pre></code></td></tr><tr><td>340</td><td><code><pre> log.D("the %d times ccb wx", i)</pre></code></td></tr><tr><td>341</td><td><code><pre> i++</pre></code></td></tr><tr><td>342</td><td><code><pre> }</pre></code></td></tr><tr><td>343</td><td><code><pre> if bl, _ := order.Callback(ono); bl {</pre></code></td></tr><tr class="miss"><td>344</td><td><code><pre> log.D("success ccb wx")</pre></code></td></tr><tr class="miss"><td>345</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr class="miss"><td>346</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>347</td><td><code><pre> }</pre></code></td></tr><tr><td>348</td><td><code><pre> }</pre></code></td></tr><tr><td>349</td><td><code><pre> }</pre></code></td></tr><tr><td>350</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@323:8">func @323:8</div><div class="info"><a href="#s_fn_@323:8">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>323</td><td><code><pre>func() {</pre></code></td></tr><tr><td>324</td><td><code><pre> if callback == true {</pre></code></td></tr><tr><td>325</td><td><code><pre> if bl, _ := order.Callback(ono); bl != true {</pre></code></td></tr><tr><td>326</td><td><code><pre> log.D("callback=false")</pre></code></td></tr><tr><td>327</td><td><code><pre> go func(ono string) {</pre></code></td></tr><tr><td>328</td><td><code><pre> log.D("回调出错,后续处理中")</pre></code></td></tr><tr><td>329</td><td><code><pre> timer := time.NewTicker(3 * time.Second)</pre></code></td></tr><tr><td>330</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>331</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>332</td><td><code><pre> for {</pre></code></td></tr><tr><td>333</td><td><code><pre> select {</pre></code></td></tr><tr><td>334</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>335</td><td><code><pre> if i >= 5 {</pre></code></td></tr><tr><td>336</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>337</td><td><code><pre> log.D("kill timer wx")</pre></code></td></tr><tr><td>338</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>339</td><td><code><pre> } else {</pre></code></td></tr><tr><td>340</td><td><code><pre> log.D("the %d times ccb wx", i)</pre></code></td></tr><tr><td>341</td><td><code><pre> i++</pre></code></td></tr><tr><td>342</td><td><code><pre> }</pre></code></td></tr><tr><td>343</td><td><code><pre> if bl, _ := order.Callback(ono); bl {</pre></code></td></tr><tr><td>344</td><td><code><pre> log.D("success ccb wx")</pre></code></td></tr><tr><td>345</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>346</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>347</td><td><code><pre> }</pre></code></td></tr><tr><td>348</td><td><code><pre> }</pre></code></td></tr><tr><td>349</td><td><code><pre> }</pre></code></td></tr><tr><td>350</td><td><code><pre> }(ono)</pre></code></td></tr><tr><td>351</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>352</td><td><code><pre> log.D("callback=true")</pre></code></td></tr><tr><td>353</td><td><code><pre> }</pre></code></td></tr><tr><td>354</td><td><code><pre> }</pre></code></td></tr><tr><td>355</td><td><code><pre> }</pre></code></td></tr></table>
<div class="funcname" id="fn_@293:5">func @293:5</div><div class="info"><a href="#s_fn_@293:5">Back</a><p>In <code>/Users/xxx/code/go/src/order/src/com.dy.order/orderwxpay/wxpay_App_http.go</code>:</p></div><table class="listing">
<tr><td>293</td><td><code><pre>func() {</pre></code></td></tr><tr><td>294</td><td><code><pre> timer := time.NewTicker(15 * time.Second)</pre></code></td></tr><tr><td>295</td><td><code><pre> i := 0</pre></code></td></tr><tr><td>296</td><td><code><pre> breakf:</pre></code></td></tr><tr><td>297</td><td><code><pre> for {</pre></code></td></tr><tr><td>298</td><td><code><pre> select {</pre></code></td></tr><tr><td>299</td><td><code><pre> case <-timer.C:</pre></code></td></tr><tr><td>300</td><td><code><pre> if i < 3 {</pre></code></td></tr><tr><td>301</td><td><code><pre> log.D("the %d times ccb wx fail", i)</pre></code></td></tr><tr><td>302</td><td><code><pre> i++</pre></code></td></tr><tr><td>303</td><td><code><pre> } else {</pre></code></td></tr><tr class="miss"><td>304</td><td><code><pre> log.D("kill timer wx fail")</pre></code></td></tr><tr class="miss"><td>305</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr class="miss"><td>306</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>307</td><td><code><pre> }</pre></code></td></tr><tr><td>308</td><td><code><pre> if bl, _ := WXpayPaySuccess(ono, status, transaction_id); bl {</pre></code></td></tr><tr><td>309</td><td><code><pre> log.D("success ccb wx fail")</pre></code></td></tr><tr><td>310</td><td><code><pre> timer.Stop()</pre></code></td></tr><tr><td>311</td><td><code><pre> break breakf</pre></code></td></tr><tr><td>312</td><td><code><pre> }</pre></code></td></tr><tr><td>313</td><td><code><pre> }</pre></code></td></tr><tr><td>314</td><td><code><pre> }</pre></code></td></tr><tr><td>315</td><td><code><pre> }</pre></code></td></tr></table>
<!-- Can be parsed by external script
PACKAGE:com.dy.order/orderwxpay DONE:88.24
-->
<div id="summaryWrapper"><div class="package">Report Total</div>
<div id="totalcov">88.92%</div>
</div>
</body>