# -*- coding: utf-8 -*- from .type import RequestType def mch_transfer_bills(self, out_bill_no, transfer_scene_id, openid, transfer_amount, transfer_remark, user_name=None, user_recv_perception=None, transfer_scene_report_infos=[], appid=None, notify_url=None): """发起转账 :param out_bill_no: 商户单号,商户系统内部的商家单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一,示例值:'plfk2020042013' :param transfer_scene_id: 转账场景ID,示例值:'1001' :param openid: 收款用户OpenID,商户AppID下,某用户的OpenID,示例值:'o-MYE42l80oelYMDE34nYD456Xoy' :param transfer_amount: 转账金额,单位为“分”,示例值: 1000 :param transfer_remark: 转账备注,用户收款时可见该备注信息,最多允许32个字符,示例值:'2020年4月报销' :param user_name: 收款用户姓名,转账金额 >= 2,000元时,该笔明细必须填写。若商户传入收款用户姓名,微信支付会校验收款用户与输入姓名是否一致,并提供电子回单,示例值:'张三' :param user_recv_perception: 用户收款时感知到的收款原因,将根据转账场景自动展示默认内容。如有其他展示需求,可在本字段传入。示例值: '现金奖励' :param transfer_scene_report_infos: 转账场景报备信息,info_type的值必需按文档指示传入,示例值: [{'info_type':'活动名称', 'info_content':'新会员有礼'}, {'info_type':'奖励说明', 'info_content':'注册会员抽奖'}] :param appid: 应用ID,可不填,默认传入初始化时的appid,示例值:'wx1234567890abcdef' :param notify_url: 通知地址,异步接收微信支付结果通知的回调地址,示例值:'https://www.weixin.qq.com/wxpay/pay.php' """ params={} if out_bill_no: params.update({'out_bill_no':out_bill_no}) else: raise Exception('out_batch_no is not assigned') if transfer_scene_id: params.update({'transfer_scene_id':transfer_scene_id}) else: raise Exception('transfer_scene_id is not assigned') if openid: params.update({'openid':openid}) else: raise Exception('openid is not assigned') if transfer_amount: params.update({'transfer_amount':transfer_amount}) else: raise Exception('transfer_amount is not assigned') if transfer_remark: params.update({'transfer_remark':transfer_remark}) else: raise Exception('transfer_remark is not assigned') cipher_data = False if user_name and transfer_amount >= 30: params.update({'user_name':self._core.encrypt(user_name)}) cipher_data = True if transfer_amount >= 200000 and not user_name: raise Exception('user_name is not assigned') if user_recv_perception: params.update({'user_recv_perception':user_recv_perception}) if transfer_scene_report_infos: params.update({'transfer_scene_report_infos':transfer_scene_report_infos}) params.update({'appid': appid or self._appid}) params.update({'notify_url': notify_url or self._notify_url}) path = '/v3/fund-app/mch-transfer/transfer-bills' return self._core.request(path, method=RequestType.POST, data=params, cipher_data=cipher_data) def mch_transfer_bills_cancel(self, out_bill_no): """撤销转账 :param out_bill_no: 商户单号,商户系统内部的商家单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一,示例值:'plfk2020042013' """ if out_bill_no: path = f'/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}/cancel' else: raise Exception('out_bill_no is not assigned') return self._core.request(path, method=RequestType.POST) def mch_transfer_bills_query(self, out_bill_no=None, transfer_bill_no=None): """查询转账单 :param out_bill_no: 商户单号,商户系统内部的商家单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一,示例值:'plfk2020042013' :param transfer_bill_no: 微信转账单号,微信商家转账系统返回的唯一标识,示例值: '1330000071100999991182020050700019480001' """ if not (out_bill_no or transfer_bill_no): raise Exception('out_bill_no or transfer_bill_no is not assigned') if out_bill_no: path = f'/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/{out_bill_no}' else: path = f'/v3/fund-app/mch-transfer/transfer-bills/transfer-bill-no/{transfer_bill_no}' return self._core.request(path) def mch_transfer_elecsign(self, out_bill_no=None, transfer_bill_no=None): """申请电子回单 :param out_bill_no: 商户单号,商户系统内部的商家单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一,示例值:'plfk2020042013' :param transfer_bill_no: 微信转账单号,微信商家转账系统返回的唯一标识,示例值: '1330000071100999991182020050700019480001' """ if not (out_bill_no or transfer_bill_no): raise Exception('out_bill_no or transfer_bill_no is not assigned') params = {} if out_bill_no: params.update({'out_bill_no':out_bill_no}) path = '/v3/fund-app/mch-transfer/elecsign/out-bill-no' else: params.update({'transfer_bill_no':transfer_bill_no}) path = '/v3/fund-app/mch-transfer/elecsign/transfer-bill-no' return self._core.request(path, method=RequestType.POST, data=params) def mch_transfer_elecsign_query(self, out_bill_no=None, transfer_bill_no=None): """查询电子回单 :param out_bill_no: 商户单号,商户系统内部的商家单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一,示例值:'plfk2020042013' :param transfer_bill_no: 微信转账单号,微信商家转账系统返回的唯一标识,示例值: '1330000071100999991182020050700019480001' """ if not (out_bill_no or transfer_bill_no): raise Exception('out_bill_no or transfer_bill_no is not assigned') if out_bill_no: path = f'/v3/fund-app/mch-transfer/elecsign/out-bill-no/{out_bill_no}' else: path = f'/v3/fund-app/mch-transfer/elecsign/transfer-bill-no/{transfer_bill_no}' return self._core.request(path)