WeChatCard.checkin_boardingpass()   A
last analyzed

Complexity

Conditions 4

Size

Total Lines 24
Code Lines 20

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 15.2377

Importance

Changes 0
Metric Value
cc 4
eloc 20
nop 11
dl 0
loc 24
rs 9.4
c 0
b 0
f 0
ccs 1
cts 9
cp 0.1111
crap 15.2377

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
# -*- coding: utf-8 -*-
2 10
from __future__ import absolute_import, unicode_literals
3
4 10
from wechatpy.client.api.base import BaseWeChatAPI
5
6
7 10
class WeChatCard(BaseWeChatAPI):
8
9 10
    API_BASE_URL = 'https://api.weixin.qq.com/'
10
11 10
    def create(self, card_data):
12
        """
13
        创建卡券
14
15
        :param card_data: 卡券信息
16
        :return: 创建的卡券 ID
17
        """
18
        result = self._post(
19
            'card/create',
20
            data=card_data,
21
            result_processor=lambda x: x['card_id']
22
        )
23
        return result
24
25 10
    def batch_add_locations(self, location_data):
26
        """
27
        批量导入门店信息
28
29
        :param location_data: 门店信息
30
        :return: 门店 ID 列表,插入失败的门店元素值为 -1
31
        """
32
        result = self._post(
33
            'card/location/batchadd',
34
            data=location_data,
35
            result_processor=lambda x: x['location_id_list']
36
        )
37
        return result
38
39 10
    def batch_get_locations(self, offset=0, count=0):
40
        """
41
        批量获取门店信息
42
        """
43
        return self._post(
44
            'card/location/batchget',
45
            data={
46
                'offset': offset,
47
                'count': count
48
            }
49
        )
50
51 10
    def get_colors(self):
52
        """
53
        获得卡券的最新颜色列表,用于创建卡券
54
        :return: 颜色列表
55
        """
56
        result = self._get(
57
            'card/getcolors',
58
            result_processor=lambda x: x['colors']
59
        )
60
        return result
61
62 10
    def create_qrcode(self, qrcode_data):
63
        """
64
        创建卡券二维码
65
66
        :param qrcode_data: 二维码信息
67
        :return: 二维码 ticket,可使用 :func:show_qrcode 换取二维码文件
68
        """
69
        result = self._post(
70
            'card/qrcode/create',
71
            data=qrcode_data,
72
            result_processor=lambda x: x['ticket']
73
        )
74
        return result
75
76 10
    def create_landingpage(self, buffer_data):
77
        """
78
        创建货架
79
        """
80
        result = self._post(
81
            'card/landingpage/create',
82
            data=buffer_data
83
        )
84
        return result
85
86 10
    def get_html(self, card_id):
87
        """
88
        图文消息群发卡券
89
        """
90
        result = self._post(
91
            'card/mpnews/gethtml',
92
            data={
93
                'card_id': card_id
94
            },
95
            result_processor=lambda x: x['content']
96
        )
97
        return result
98
99 10
    def consume_code(self, code, card_id=None):
100
        """
101
        消耗 code
102
        """
103
        card_data = {
104
            'code': code
105
        }
106
        if card_id:
107
            card_data['card_id'] = card_id
108
        return self._post(
109
            'card/code/consume',
110
            data=card_data
111
        )
112
113 10
    def decrypt_code(self, encrypt_code):
114
        """
115
        解码加密的 code
116
        """
117
        result = self._post(
118
            'card/code/decrypt',
119
            data={
120
                'encrypt_code': encrypt_code
121
            },
122
            result_processor=lambda x: x['code']
123
        )
124
        return result
125
126 10
    def delete(self, card_id):
127
        """
128
        删除卡券
129
        """
130
        return self._post(
131
            'card/delete',
132
            data={
133
                'card_id': card_id
134
            }
135
        )
136
137 10
    def get_code(self, code, card_id=None, check_consume=True):
138
        """
139
        查询 code 信息
140
        """
141
        card_data = {
142
            'code': code
143
        }
144
        if card_id:
145
            card_data['card_id'] = card_id
146
        if not check_consume:
147
            card_data['check_consume'] = check_consume
148
        return self._post(
149
            'card/code/get',
150
            data=card_data
151
        )
152
153 10
    def get_card_list(self, openid, card_id=None):
154
        """
155
        用于获取用户卡包里的,属于该appid下的卡券。
156
        """
157
        card_data = {
158
            'openid': openid
159
        }
160
        if card_id:
161
            card_data['card_id'] = card_id
162
        return self._post(
163
            'card/user/getcardlist',
164
            data=card_data
165
        )
166
167 10
    def batch_get(self, offset=0, count=50, status_list=None):
168
        """
169
        批量查询卡券信息
170
        """
171
        card_data = {
172
            'offset': offset,
173
            'count': count
174
        }
175
        if status_list:
176
            card_data['status_list'] = status_list
177
        return self._post(
178
            'card/batchget',
179
            data=card_data
180
        )
181
182 10
    def get(self, card_id):
183
        """
184
        查询卡券详情
185
        """
186
        result = self._post(
187
            'card/get',
188
            data={
189
                'card_id': card_id
190
            },
191
            result_processor=lambda x: x['card']
192
        )
193
        return result
194
195 10
    def update_code(self, card_id, old_code, new_code):
196
        """
197
        更新卡券 code
198
        """
199
        return self._post(
200
            'card/code/update',
201
            data={
202
                'card_id': card_id,
203
                'code': old_code,
204
                'new_code': new_code
205
            }
206
        )
207
208 10
    def invalid_code(self, code, card_id=None):
209
        """
210
        设置卡券失效
211
        """
212
        card_data = {
213
            'code': code
214
        }
215
        if card_id:
216
            card_data['card_id'] = card_id
217
        return self._post(
218
            'card/code/unavailable',
219
            data=card_data
220
        )
221
222 10
    def update(self, card_data):
223
        """
224
        更新卡券信息
225
        """
226
        return self._post(
227
            'card/update',
228
            data=card_data
229
        )
230
231 10
    def set_paycell(self, card_id, is_open):
232
        """
233
        更新卡券信息
234
        """
235
        return self._post(
236
            'card/paycell/set',
237
            data={
238
                'card_id': card_id,
239
                'is_open': is_open
240
            }
241
        )
242
243 10
    def set_test_whitelist(self, openids=None, usernames=None):
244
        """
245
        设置卡券测试用户白名单
246
        """
247
        openids = openids or []
248
        usernames = usernames or []
249
        return self._post(
250
            'card/testwhitelist/set',
251
            data={
252
                'openid': openids,
253
                'username': usernames
254
            }
255
        )
256
257 10
    def activate_membercard(self, membership_number, code, **kwargs):
258
        """
259
        激活会员卡 - 接口激活方式
260
        详情请参见
261
        https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283
262
263
        参数示例:
264
        {
265
            "init_bonus": 100,
266
            "init_bonus_record":"旧积分同步",
267
            "init_balance": 200,
268
            "membership_number": "AAA00000001",
269
            "code": "12312313",
270
            "card_id": "xxxx_card_id",
271
            "background_pic_url": "https://mmbiz.qlogo.cn/mmbiz/0?wx_fmt=jpeg",
272
            "init_custom_field_value1": "xxxxx",
273
            "init_custom_field_value2": "xxxxx",
274
            "init_custom_field_value3": "xxxxx"
275
        }
276
277
        返回示例:
278
        {"errcode":0,   "errmsg":"ok"}
279
280
        :param membership_number: 必填,会员卡编号,由开发者填入,作为序列号显示在用户的卡包里。可与Code码保持等值
281
        :param code: 必填,领取会员卡用户获得的code
282
        :param kwargs: 其他非必填字段,包含则更新对应字段。详情参见微信文档 “6 激活会员卡” 部分
283
        :return: 参见返回示例
284
        """
285
        kwargs['membership_number'] = membership_number
286
        kwargs['code'] = code
287
        return self._post(
288
            'card/membercard/activate',
289
            data=kwargs
290
        )
291
292 10
    def update_membercard(self, code, card_id, **kwargs):
293
        """
294
        更新会员信息
295
        详情请参见
296
        https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283
297
298
        注意事项:
299
        1.开发者可以同时传入add_bonus和bonus解决由于同步失败带来的幂等性问题。同时传入add_bonus和bonus时
300
            add_bonus作为积分变动消息中的变量值,而bonus作为卡面上的总积分额度显示。余额变动同理。
301
        2.开发者可以传入is_notify_bonus控制特殊的积分对账变动不发送消息,余额变动同理。
302
303
        参数示例:
304
        {
305
            "code": "179011264953",
306
            "card_id": "p1Pj9jr90_SQRaVqYI239Ka1erkI",
307
            "background_pic_url": "https://mmbiz.qlogo.cn/mmbiz/0?wx_fmt=jpeg",
308
            "record_bonus": "消费30元,获得3积分",
309
            "bonus": 3000,
310
            "add_bonus": 30,
311
            "balance": 3000,
312
            "add_balance": -30,
313
            "record_balance": "购买焦糖玛琪朵一杯,扣除金额30元。",
314
            "custom_field_value1": "xxxxx",
315
            "custom_field_value2": "xxxxx",
316
            "notify_optional": {
317
                "is_notify_bonus": true,
318
                "is_notify_balance": true,
319
                "is_notify_custom_field1":true
320
            }
321
        }
322
323
        返回示例:
324
        {
325
            "errcode": 0,
326
            "errmsg": "ok",
327
            "result_bonus": 100,
328
            "result_balance": 200,
329
            "openid": "oFS7Fjl0WsZ9AMZqrI80nbIq8xrA"
330
        }
331
332
        :param code: 必填,卡券Code码
333
        :param card_id: 必填,卡券ID
334
        :param kwargs: 其他非必填字段,包含则更新对应字段。详情参见微信文档 “7 更新会员信息” 部分
335
        :return: 参见返回示例
336
        """
337
        kwargs.update({
338
            'code': code,
339
            'card_id': card_id,
340
        })
341
        return self._post(
342
            'card/membercard/updateuser',
343
            data=kwargs
344
        )
345
346 10
    def get_membercard_user_info(self, card_id, code):
347
        """
348
        查询会员卡的会员信息
349
        详情请参见
350
        https://mp.weixin.qq.com/wiki?id=mp1466494654_K9rNz
351
352
        :param card_id: 查询会员卡的 Card ID
353
        :param code: 所查询用户领取到的 code 值
354
        :return: 会员信息,包括激活资料、积分信息以及余额等信息
355
        """
356
        return self._post(
357
            'card/membercard/userinfo/get',
358
            data={
359
                'card_id': card_id,
360
                'code': code,
361
            },
362
        )
363
364 10
    def add_pay_giftcard(self, base_info, extra_info, is_membercard):
365
        """
366
        新增支付后投放卡券的规则,支持支付后领卡,支付后赠券
367
        详情请参见
368
        https://mp.weixin.qq.com/wiki?id=mp1466494654_K9rNz
369
370
        :param base_info: 营销规则结构体
371
        :type base_info: dict
372
        :param extra_info: 支付规则结构体
373
        :type extra_info: dict
374
        :param is_membercard: 本次规则是否是领卡。(领卡传入 True, 赠券传入 False)
375
        :type is_membercard: bool
376
        :return: 规则 ID, 设置成功的列表,以及设置失败的列表
377
        """
378
        if is_membercard:
379
            rule_key = 'member_rule'
380
            rule_type = 'RULE_TYPE_PAY_MEMBER_CARD'
381
        else:
382
            rule_key = 'single_pay'
383
            rule_type = 'RULE_TYPE_SINGLE_PAY'
384
        return self._post(
385
            'card/paygiftcard/add',
386
            data={
387
                'rule_info': {
388
                    'type': rule_type,
389
                    'base_info': base_info,
390
                    rule_key: extra_info,
391
                }
392
            }
393
        )
394
395 10
    def del_pay_giftcard(self, rule_id):
396
        """
397
        删除支付后投放卡券的规则
398
        详情请参见
399
        https://mp.weixin.qq.com/wiki?id=mp1466494654_K9rNz
400
401
        :param rule_id: 支付即会员的规则 ID
402
        """
403
        return self._post(
404
            'card/paygiftcard/delete',
405
            data={
406
                'rule_id': rule_id,
407
            },
408
        )
409
410 10
    def get_pay_giftcard(self, rule_id):
411
        """
412
        查询支付后投放卡券的规则
413
        详情请参见
414
        https://mp.weixin.qq.com/wiki?id=mp1466494654_K9rNz
415
416
        :param rule_id: 支付即会员的规则 ID
417
        :return: 支付后投放卡券的规则
418
        :rtype: dict
419
        """
420
        return self._post(
421
            'card/paygiftcard/getbyid',
422
            data={
423
                'rule_id': rule_id,
424
            },
425
            result_processor=lambda x: x['rule_info'],
426
        )
427
428 10
    def batch_get_pay_giftcard(self, effective=True, offset=0, count=10):
429
        """
430
        批量查询支付后投放卡券的规则
431
        详情请参见
432
        https://mp.weixin.qq.com/wiki?id=mp1466494654_K9rNz
433
434
435
        :param effective: 是否仅查询生效的规则
436
        :type effective: bool
437
        :param offset: 起始偏移量
438
        :type offset: int
439
        :param count: 查询的数量
440
        :type count: int
441
        :return: 支付后投放卡券规则的总数,以及查询到的列表
442
        """
443
        return self._post(
444
            'card/paygiftcard/batchget',
445
            data={
446
                'type': 'RULE_TYPE_PAY_MEMBER_CARD',
447
                'effective': effective,
448
                'offset': offset,
449
                'count': count,
450
            },
451
        )
452
453 10
    def update_movie_ticket(self, code, ticket_class, show_time, duration,
454
                            screening_room, seat_number, card_id=None):
455
        """
456
        更新电影票
457
        """
458
        ticket = {
459
            'code': code,
460
            'ticket_class': ticket_class,
461
            'show_time': show_time,
462
            'duration': duration,
463
            'screening_room': screening_room,
464
            'seat_number': seat_number
465
        }
466
        if card_id:
467
            ticket['card_id'] = card_id
468
        return self._post(
469
            'card/movieticket/updateuser',
470
            data=ticket
471
        )
472
473 10
    def checkin_boardingpass(self, code, passenger_name, seat_class,
474
                             etkt_bnr, seat='', gate='', boarding_time=None,
475
                             is_cancel=False, qrcode_data=None, card_id=None):
476
        """
477
        飞机票接口
478
        """
479
        data = {
480
            'code': code,
481
            'passenger_name': passenger_name,
482
            'class': seat_class,
483
            'etkt_bnr': etkt_bnr,
484
            'seat': seat,
485
            'gate': gate,
486
            'is_cancel': is_cancel
487
        }
488
        if boarding_time:
489
            data['boarding_time'] = boarding_time
490
        if qrcode_data:
491
            data['qrcode_data'] = qrcode_data
492
        if card_id:
493
            data['card_id'] = card_id
494
        return self._post(
495
            'card/boardingpass/checkin',
496
            data=data
497
        )
498
499 10
    def update_luckymoney_balance(self, code, balance, card_id=None):
500
        """
501
        更新红包余额
502
        """
503
        card_data = {
504
            'code': code,
505
            'balance': balance
506
        }
507
        if card_id:
508
            card_data['card_id'] = card_id
509
        return self._post(
510
            'card/luckymoney/updateuserbalance',
511
            data=card_data
512
        )
513
514 10
    def get_redirect_url(self, url, encrypt_code, card_id):
515
        """
516
        获取卡券跳转外链
517
        """
518
        from wechatpy.utils import WeChatSigner
519
520
        code = self.decrypt_code(encrypt_code)
521
522
        signer = WeChatSigner()
523
        signer.add_data(self.secret)
524
        signer.add_data(code)
525
        signer.add_data(card_id)
526
        signature = signer.signature
527
528
        r = '{url}?encrypt_code={code}&card_id={card_id}&signature={signature}'
529
        return r.format(
530
            url=url,
531
            code=encrypt_code,
532
            card_id=card_id,
533
            signature=signature
534
        )
535
536 10
    def deposit_code(self, card_id, codes):
537
        """
538
        导入code
539
        """
540
        card_data = {
541
            'card_id': card_id,
542
            'code': codes
543
        }
544
        return self._post(
545
            'card/code/deposit',
546
            data=card_data
547
        )
548
549 10
    def get_deposit_count(self, card_id):
550
        """
551
        查询导入code数目
552
        """
553
        card_data = {
554
            'card_id': card_id,
555
        }
556
        return self._post(
557
            'card/code/getdepositcount',
558
            data=card_data
559
        )
560
561 10
    def check_code(self, card_id, codes):
562
        """
563
        核查code
564
        """
565
        card_data = {
566
            'card_id': card_id,
567
            'code': codes
568
        }
569
        return self._post(
570
            'card/code/checkcode',
571
            data=card_data
572
        )
573
574 10
    def modify_stock(self, card_id, n):
575
        """
576
        修改库存
577
        """
578
        if n == 0:
579
            return
580
        card_data = {
581
            'card_id': card_id,
582
        }
583
        if n > 0:
584
            card_data['increase_stock_value'] = n
585
        elif n < 0:
586
            card_data['reduce_stock_value'] = -n
587
        return self._post(
588
            'card/modifystock',
589
            data=card_data
590
        )
591
592 10
    def get_activate_url(self, card_id, outer_str=None):
593
        """
594
        获取开卡插件 Url, 内含调用开卡插件所需的参数
595
        详情请参考
596
        https://mp.weixin.qq.com/wiki?id=mp1499332673_Unm7V
597
598
        :param card_id: 会员卡的card_id
599
        :param outer_str: 渠道值,用于统计本次领取的渠道参数
600
        :return: 内含调用开卡插件所需的参数的 Url
601
        """
602
        return self._post(
603
            'card/membercard/activate/geturl',
604
            data={
605
                'card_id': card_id,
606
                'outer_str': outer_str,
607
            },
608
            result_processor=lambda x: x['url'],
609
        )
610
611 10
    def get_activate_info(self, activate_ticket):
612
        """
613
        获取用户开卡时提交的信息
614
        详情请参考
615
        https://mp.weixin.qq.com/wiki?id=mp1499332673_Unm7V
616
617
        :param activate_ticket: 跳转型开卡组件开卡后回调中的激活票据,可以用来获取用户开卡资料
618
        :return: 用户开卡时填写的字段值
619
        """
620
        return self._post(
621
            'card/membercard/activatetempinfo/get',
622
            data={
623
                'activate_ticket': activate_ticket,
624
            },
625
            result_processor=lambda x: x['info'],
626
        )
627
628 10
    def set_activate_user_form(self, card_id, **kwargs):
629
        """
630
        设置开卡字段接口
631
        详情请参考
632
        https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1451025283
633
        "6 激活会员卡" -> "6.2 一键激活" -> "步骤二:设置开卡字段接口"
634
635
        参数示例:
636
        {
637
            "card_id": "pbLatjnrwUUdZI641gKdTMJzHGfc",
638
            "service_statement": {
639
                "name": "会员守则",
640
                "url": "https://www.qq.com"
641
            },
642
            "bind_old_card": {
643
                "name": "老会员绑定",
644
                "url": "https://www.qq.com"
645
            },
646
            "required_form": {
647
                "can_modify":false,
648
                "rich_field_list": [
649
                    {
650
                        "type": "FORM_FIELD_RADIO",
651
                        "name": "兴趣",
652
                        "values": [
653
                            "钢琴",
654
                            "舞蹈",
655
                            "足球"
656
                        ]
657
                    },
658
                    {
659
                        "type": "FORM_FIELD_SELECT",
660
                        "name": "喜好",
661
                        "values": [
662
                            "郭敬明",
663
                            "韩寒",
664
                            "南派三叔"
665
                        ]
666
                    },
667
                    {
668
                        "type": "FORM_FIELD_CHECK_BOX",
669
                        "name": "职业",
670
                        "values": [
671
                            "赛车手",
672
                            "旅行家"
673
                        ]
674
                    }
675
                ],
676
                "common_field_id_list": [
677
                    "USER_FORM_INFO_FLAG_MOBILE"
678
                ]
679
            },
680
            "optional_form": {
681
                "can_modify":false,
682
                "common_field_id_list": [
683
                    "USER_FORM_INFO_FLAG_LOCATION",
684
                    "USER_FORM_INFO_FLAG_BIRTHDAY"
685
                ],
686
                "custom_field_list": [
687
                    "喜欢的电影"
688
                ]
689
            }
690
        }
691
        common_field_id_list 值见常量 `wechatpy.constants.UserFormInfoFlag`
692
693
        :param card_id: 卡券ID
694
        :param kwargs: 其他非必填参数,见微信文档
695
        """
696
        kwargs['card_id'] = card_id
697
        return self._post(
698
            'card/membercard/activateuserform/set',
699
            data=kwargs
700
        )
701