apply4subject.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. from ..api.base import BaseWeChatAPI
  4. from ...type import RequestType
  5. class Apply4Subject(BaseWeChatAPI):
  6. def submit_applyment(self, business_code, contact_info, subject_info, identification_info, channel_id = None,
  7. addition_info = None, ubo_info_list = []):
  8. """(商户开户意愿)提交申请单
  9. :param business_code: 业务申请编号,示例值:'APPLYMENT_00000000001'
  10. :param contact_info: 联系人信息,示例值:{'name':'张三','id_card_number':'320311770706001','mobile':'13900000000'}
  11. :param subject_info: 主体信息,示例值:{'subject_type':'SUBJECT_TYPE_ENTERPRISE','business_license_info':{'license_copy':'demo-media-id','license_number':'123456789012345678','merchant_name':'腾讯科技有限公司','legal_person':'张三','company_address':'广东省深圳市南山区xx路xx号','licence_valid_date':'["1970-01-01","forever"]'}}
  12. :param identification_info: 法人身份信息,示例值:{'identification_type':'IDENTIFICATION_TYPE_IDCARD','identification_name':'张三','identification_number':'110220330044005500','identification_valid_date':'["1970-01-01","forever"]','identification_front_copy':'0P3ng6KTIW4-Q_l2FjKLZ...','identification_back_copy':'0P3ng6KTIW4-Q_l2FjKLZ...'}
  13. :param channel_id: 渠道商户号,示例值:'20001111'
  14. :param addition_info: 补充材料,示例值:{'confirm_mchid_list':['20001113']}
  15. :param ubo_info_list: 最终受益人信息列表,示例值:[{'ubo_id_doc_type':'IDENTIFICATION_TYPE_IDCARD','ubo_id_doc_name':'张三','ubo_id_doc_number':'110220330044005500'}]
  16. """
  17. params = {}
  18. if business_code:
  19. params.update({'business_code': business_code})
  20. else:
  21. raise Exception('business_code is not assigned.')
  22. if contact_info:
  23. params.update({'contact_info': contact_info})
  24. else:
  25. raise Exception('contact_info is not assigned.')
  26. if subject_info:
  27. params.update({'subject_info': subject_info})
  28. else:
  29. raise Exception('subject_info is not assigned.')
  30. if identification_info:
  31. params.update({'identification_info': identification_info})
  32. else:
  33. raise Exception('identification_info is not assigned')
  34. if channel_id:
  35. params.update({'channel_id': channel_id})
  36. if addition_info:
  37. params.update({'addition_info': addition_info})
  38. if ubo_info_list:
  39. params.update({'ubo_info_list': ubo_info_list})
  40. contact_name = params.get('contact_info').get('name')
  41. if contact_name:
  42. params['contact_info']['name'] = self.client.core.encrypt(contact_name)
  43. contact_mobile = params.get('contact_info').get('mobile')
  44. if contact_mobile:
  45. params['contact_info']['mobile'] = self.client.core.encrypt(contact_mobile)
  46. contact_number = params.get('contact_info').get('id_card_number')
  47. if contact_number:
  48. params['contact_info']['id_card_number'] = self.client.core.encrypt(contact_number)
  49. identification_name = params.get('identification_info').get('identification_name')
  50. if identification_name:
  51. params['identification_info']['identification_name'] = self.client.core.encrypt(identification_name)
  52. identification_number = params.get('identification_info').get('identification_number')
  53. if identification_number:
  54. params['identification_info']['identification_number'] = self.client.core.encrypt(identification_number)
  55. identification_address = params.get('identification_info').get('identification_address')
  56. if identification_address:
  57. params['identification_info']['identification_address'] = self.client.core.encrypt(identification_address)
  58. if params.get('ubo_info_list'):
  59. for ubo_info in params['ubo_info_list']:
  60. ubo_info['ubo_id_doc_name'] = self.client.core.encrypt(ubo_info['ubo_id_doc_name'])
  61. ubo_info['ubo_id_doc_number'] = self.client.core.encrypt(ubo_info['ubo_id_doc_number'])
  62. ubo_info['ubo_id_doc_address'] = self.client.core.encrypt(ubo_info['ubo_id_doc_address'])
  63. path = '/v3/apply4subject/applyment'
  64. return self.client.core.request(path, method = RequestType.POST, data = params, cipher_data = True)
  65. def cancel_applyment(self, business_code = None, applyment_id = None):
  66. """(商户开户意愿)撤销申请单
  67. :param business_code: 业务申请编号,示例值:'2000001234567890'
  68. :param applyment_id: 申请单编号,示例值:2000001234567890
  69. """
  70. if applyment_id:
  71. path = '/v3/apply4subject/applyment/%s/cancel' % applyment_id
  72. elif business_code:
  73. path = '/v3/apply4subject/applyment/%s/cancel' % business_code
  74. else:
  75. raise Exception('business_code or applyment_id is not assigned.')
  76. return self.client.core.request(path, method = RequestType.POST)
  77. def query_applyment_audit(self, business_code = None, applyment_id = None):
  78. """(商户开户意愿)查询申请单审核结果
  79. :param business_code: 业务申请编号,示例值:'2000001234567890'
  80. :param applyment_id: 申请单编号,示例值:2000001234567890
  81. """
  82. if business_code:
  83. path = '/v3/apply4subject/applyment?business_code=%s' % business_code
  84. elif applyment_id:
  85. path = '/v3/apply4subject/applyment?applyment_id=%s' % applyment_id
  86. else:
  87. raise Exception('business_code or applyment_id is not assigned.')
  88. return self.client.core.request(path)
  89. def query_applyment_state(self, sub_mchid):
  90. """(商户开户意愿)获取商户开户意愿确认状态
  91. :param sub_mchid: 特约商户号,示例值:'1511101111'
  92. """
  93. if sub_mchid:
  94. path = '/v3/apply4subject/applyment/merchants/%s/state' % sub_mchid
  95. else:
  96. raise Exception('sub_mchid is not assigned.')
  97. return self.client.core.request(path)