Example #1
0
    def parse_response(self, response: requests.Response):
        """
        处理请求,将 requests 的返回包装为 PayJSResult
        :param response: requests 的返回值
        :return: 一个 PayJSResult 元素(Success 或 Fail)
        """
        if response.status_code == 200:
            # 扫码支付 与 订单查询;收银台支付失败
            try:
                j = json.loads(response.content)
            except json.JSONDecodeError:
                return PayJSResultFail(base=self,
                                       raw_response=response,
                                       r_json=False)
            except UnicodeDecodeError:
                return PayJSResultFail(base=self,
                                       raw_response=response,
                                       r_json=False)

            if str(j.get('return_code')) == '0':  # 请求失败
                response = PayJSResultFail(base=self,
                                           raw_response=response,
                                           r_json=j)
            else:
                if self.sign(j) == j.get('sign'):
                    response = PayJSResultSuccess(base=self,
                                                  raw_response=response,
                                                  r_json=j)
                else:
                    response = PayJSResultFail(base=self,
                                               raw_response=response,
                                               r_json=j)
                    response.ERROR_MSG = '返回的签名错误'

        elif response.status_code == 302:
            # 收银台支付
            return PayJSResultSuccess(base=self,
                                      raw_response=response,
                                      r_json=None)
        else:
            response = PayJSResultFail(base=self,
                                       raw_response=response,
                                       r_json=False)
        return response