docs: 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)