def get_notify_data_and_verify(self, resp_data): """ 接收从支付宝支付后台发送过来的数据并验证签名 :return: 支付宝支付后台返回的数据 """ # 接收从支付宝后台传来的数据 if checkSign(resp_data) != 0: logging.error('from ali pay notification: sign error: ' + str(resp_data)) raise AliPayException(AliPayException.ERROR_SIGN, u'签名错误') notify_id = resp_data.get('notify_id') if not notify_id or not AliPayApi.verify_notification(notify_id): logging.error('from ali pay notification: notify_id error: ' + str(resp_data)) raise AliPayException(AliPayException.FAILED_NOTIFY_ID, u'notify_id无效') return resp_data
def query_and_set_order(cls, trade): if trade.transaction_id: resp_data = AliPayApi.query_single_trade({'transaction_id': trade.transaction_id}) else: resp_data = AliPayApi.query_single_trade({'out_trade_no': trade.trade_no}) if resp_data['is_success'] == 'T': if checkSign(resp_data) != 0: logging.error('from ali pay single order query: sign error: ' + trade.trade_no) logging.error(resp_data) return None trade.transaction_id = resp_data['trade_no'] trade.gmt_create = resp_data['gmt_create'] if 'gmt_payment' in resp_data: trade.gmt_payment = resp_data['gmt_payment'] if 'gmt_last_modified_time' in resp_data: trade.gmt_last_modified_time = resp_data['gmt_last_modified_time'] if 'time_out' in resp_data: trade.time_out = resp_data['time_out'] if 'gmt_close' in resp_data: trade.gmt_close = resp_data['gmt_close'] if 'time_out_type' in resp_data: trade.time_out_type = resp_data['time_out_type'] if 'bank_seq_no' in resp_data: trade.bank_seq_no = resp_data['bank_seq_no'] trade.ali_result_code = resp_data['result_code'] trade.ali_err_code = resp_data.get('error', '') trade.ali_trade_status = resp_data.get('trade_status', '') if trade.ali_trade_status == 'TRADE_SUCCESS': # 支付成功 trade.order_status = 3 with transaction.atomic(): # 支付成功 if trade.order_status in (3,9) and trade.is_order_over is False: trade.ali_response = resp_data trade.is_order_over = True trade.save(force_update=True) # 通知订单支付成功 product_order = ProductOrder.objects.select_for_update().get(order_no=trade.order_no) # product_order.status = 2 # product_order.pay_type = 2 notify_order_pay_success(product_order) else: trade.save(force_update=True) return trade else: return None