用的flask-restful,如果只调用notify_url的话,支付宝能正确post到我的服务器notify_url,所以能正确修改订单状态。但看到官方文档时有些不懂:
https://opendocs.alipay.com/open/270/105902
-
程序执行完后必须打印输出“success”(不包含引号)。如果商户反馈给支付宝的字符不是 success 这7个字符,支付宝服务器会不断重发通知,直到超过24小时22分钟。一般情况下,25小时以内完成8次通知(通知的间隔频率一般是:4m,10m,10m,1h,2h,6h,15h);
-
程序执行完成后,该页面不能执行页面跳转。如果执行页面跳转,支付宝会收不到 success 字符,会被支付宝服务器判定为该页面程序运行出现异常,而重发处理结果通知;
restful下,执行完代码后没有输出“success”服务器并没有重复发送通知,如何才能将“success”反馈给支付宝呢?到需不需要这个“success”呢?
def post(self):
# start 验签
args = request.form.to_dict()
print(args)
sign = args.pop('sign', None)
order_id = args.pop('out_trade_no', None)
if not order_id:
return ''
order_id = order_id[:-20]
args.pop('sign_type')
params = sorted(args.items(), key=lambda e: e[0], reverse=False) # 取出字典元素按key的字母升序排序形成列表
message = '&'.join(u"{}={}".format(k, v) for k, v in params).encode() # 将列表转为二进制参数字符串
try:
status = verify_with_rsa(ALIPAY_PUBLIC_KEY.encode('utf-8').decode('utf-8'), message, sign)
except:
status = False
# end 验签
order = OrderModel.query.get(order_id)
if not order:
return ''
if not status:
order.o_valid = NOT_VALID
order.save()
return ''
if order.o_status:
return ''
order.o_status = PAID
order.o_valid = NOT_VALID
order.save()
return ''
我的代码很简单,也能用,但不知道这样用对不对
|