docs: def query_signing(self, contract_id=None, plan_id=None, contract_code=None, openid=None, version="1.0"):
          """
          查询签约关系 api
  
          :param contract_id: 可选 委托代扣协议id 委托代扣签约成功后由微信返回的委托代扣协议id，选择contract_id查询，则此参数必填
          :param plan_id: 可选 模板id 商户在微信商户平台配置的代扣模板id，选择plan_id+contract_code查询，则此参数必填
          :param contract_code: 可选 签约协议号 商户请求签约时传入的签约协议号，商户侧须唯一。选择plan_id+contract_code查询，则此参数必填
          :param openid: 可选 openid 用户标识，必须保证与传入appid对应
          :param version: 版本号 固定值1.0
          :return: 返回的结果信息
          """
          if not contract_id and not (plan_id and contract_code) and not (plan_id and openid):
              raise ValueError("contract_id and (plan_id, contract_code) and (plan_id, openid) must be a choice.")
          data = {
              "appid": self.appid,
              "mch_id": self.mch_id,
              "contract_id": contract_id,
              "plan_id": plan_id,
              "contract_code": contract_code,
              "openid": openid,
              "version": version,
              "nonce_str": None,
          }
          return self._post('papay/querycontract', data=data)