申请扣款 api

        :param body: 商品描述 商品或支付单简要描述
        :param out_trade_no: 可选 商户订单号 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
        :param total_fee: 总金额 订单总金额，单位为分，只能为整数，详见支付金额
        :param contract_id: 委托代扣协议id 签约成功后，微信返回的委托代扣协议id
        :param notify_url: 回调通知url 接受扣款结果异步回调通知的url
        :param detail: 可选 商品详情 商品名称明细列表
        :param attach: 可选 附加数据 附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
        :param fee_type: 可选 货币类型 符合ISO 4217标准的三位字母代码，默认人民币：CNY
        :param goods_tag: 可选 商品标记 商品标记，代金券或立减优惠功能的参数，说明详见代金券或立减优惠
        :param clientip: 可选 客户端 IP 点分IP格式(客户端IP)
        :param deviceid: 可选 设备ID android填imei的一次md5; ios填idfa的一次md5
        :param mobile: 可选 手机号 用户手机号
        :param email: 可选 邮箱地址 用户邮箱地址
        :param qq: 可选 QQ号 用户QQ号
        :param openid: 可选 微信open ID 用户微信open ID
        :param creid: 可选 身份证号 用户身份证号
        :param outerid: 可选 商户侧用户标识 用户在商户侧的标识
        :return: 返回的结果信息

def apply_deduct(self, body, total_fee, contract_id, notify_url, out_trade_no=None,
                     detail=None, attach=None, fee_type='CNY', goods_tag=None, clientip=None, deviceid=None,
                     mobile=None, email=None, qq=None, openid=None, creid=None, outerid=None):
        """
        申请扣款 api

        :param body: 商品描述 商品或支付单简要描述
        :param out_trade_no: 可选 商户订单号 商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号
        :param total_fee: 总金额 订单总金额，单位为分，只能为整数，详见支付金额
        :param contract_id: 委托代扣协议id 签约成功后，微信返回的委托代扣协议id
        :param notify_url: 回调通知url 接受扣款结果异步回调通知的url
        :param detail: 可选 商品详情 商品名称明细列表
        :param attach: 可选 附加数据 附加数据，在查询API和支付通知中原样返回，该字段主要用于商户携带订单的自定义数据
        :param fee_type: 可选 货币类型 符合ISO 4217标准的三位字母代码，默认人民币：CNY
        :param goods_tag: 可选 商品标记 商品标记，代金券或立减优惠功能的参数，说明详见代金券或立减优惠
        :param clientip: 可选 客户端 IP 点分IP格式(客户端IP)
        :param deviceid: 可选 设备ID android填imei的一次md5; ios填idfa的一次md5
        :param mobile: 可选 手机号 用户手机号
        :param email: 可选 邮箱地址 用户邮箱地址
        :param qq: 可选 QQ号 用户QQ号
        :param openid: 可选 微信open ID 用户微信open ID
        :param creid: 可选 身份证号 用户身份证号
        :param outerid: 可选 商户侧用户标识 用户在商户侧的标识
        :return: 返回的结果信息
        """
        trade_type = 'PAP'  # 交易类型 交易类型PAP-微信委托代扣支付
        timestamp = int(time.time())  # 10位时间戳
        spbill_create_ip = get_external_ip()  # 终端IP 调用微信支付API的机器IP
        if not out_trade_no:
            now = datetime.fromtimestamp(time.time(), tz=timezone('Asia/Shanghai'))
            out_trade_no = '{0}{1}{2}'.format(
                self.mch_id,
                now.strftime('%Y%m%d%H%M%S'),
                random.randint(1000, 10000)
            )

        data = {
            "appid": self.appid,
            "mch_id": self.mch_id,
            "body": body,
            "out_trade_no": out_trade_no,
            "total_fee": total_fee,
            "trade_type": trade_type,
            "contract_id": contract_id,
            "notify_url": notify_url,
            "detail": detail,
            "attach": attach,
            "fee_type": fee_type,
            "goods_tag": goods_tag,
            "clientip": clientip,
            "deviceid": deviceid,
            "mobile": mobile,
            "email": email,
            "qq": qq,
            "openid": openid,
            "creid": creid,
            "outerid": outerid,
            "timestamp": timestamp,
            "spbill_create_ip": spbill_create_ip,
        }
        return self._post("pay/pappayapply", data=data)