Alipay.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #coding=utf-8
  2. import traceback
  3. from django.conf import settings
  4. from alipay.aop.api.AlipayClientConfig import AlipayClientConfig
  5. from alipay.aop.api.DefaultAlipayClient import DefaultAlipayClient
  6. from alipay.aop.api.domain.AlipayTradePrecreateModel import AlipayTradePrecreateModel
  7. from alipay.aop.api.domain.AlipayTradeQueryModel import AlipayTradeQueryModel
  8. from alipay.aop.api.request.AlipayTradePrecreateRequest import AlipayTradePrecreateRequest
  9. from alipay.aop.api.request.AlipayTradeQueryRequest import AlipayTradeQueryRequest
  10. from alipay.aop.api.response.AlipayTradePrecreateResponse import AlipayTradePrecreateResponse
  11. from alipay.aop.api.response.AlipayTradeQueryResponse import AlipayTradeQueryResponse
  12. from utils.exceptions import CustomError
  13. class Alipay():
  14. @staticmethod
  15. def payUnifiedOrder(payment_no,amount):
  16. if amount < 0.01:
  17. raise CustomError(u'无效的金额')
  18. alipay_client_config = AlipayClientConfig()
  19. try:
  20. alipay_client_config.app_id = settings.ALIPAY_SETTING['app_id']
  21. alipay_client_config.app_private_key = settings.ALIPAY_SETTING['app_private_key']
  22. alipay_client_config.alipay_public_key = settings.ALIPAY_SETTING['alipay_public_key']
  23. notify_url = settings.ALIPAY_SETTING['notify_url']
  24. except:
  25. raise CustomError(u'没有配置支付宝对接信息')
  26. alipay_client_config.timeout = 120
  27. client = DefaultAlipayClient(alipay_client_config=alipay_client_config)
  28. model = AlipayTradePrecreateModel()
  29. model.out_trade_no = payment_no
  30. model.total_amount = amount
  31. model.subject = ""
  32. request = AlipayTradePrecreateRequest(biz_model=model)
  33. request.notify_url = notify_url
  34. try:
  35. response_content = client.execute(request)
  36. except Exception as e:
  37. traceback.print_exc()
  38. raise CustomError(str(e))
  39. if not response_content:
  40. raise CustomError(u'支付宝请求失败!')
  41. response = AlipayTradePrecreateResponse()
  42. response.parse_response_content(response_content)
  43. if not response.is_success():
  44. raise CustomError(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
  45. return response.qr_code
  46. @staticmethod
  47. def queryUnifiedOrder(payment_no):
  48. if not payment_no:
  49. raise CustomError(u'无效的支付单号')
  50. alipay_client_config = AlipayClientConfig()
  51. try:
  52. alipay_client_config.app_id = settings.ALIPAY_SETTING['app_id']
  53. alipay_client_config.app_private_key = settings.ALIPAY_SETTING['app_private_key']
  54. alipay_client_config.alipay_public_key = settings.ALIPAY_SETTING['alipay_public_key']
  55. except:
  56. raise CustomError(u'没有配置支付宝对接信息')
  57. alipay_client_config.timeout = 120
  58. client = DefaultAlipayClient(alipay_client_config=alipay_client_config)
  59. model = AlipayTradeQueryModel()
  60. model.out_trade_no = payment_no
  61. request = AlipayTradeQueryRequest(biz_model=model)
  62. try:
  63. response_content = client.execute(request)
  64. except Exception as e:
  65. traceback.print_exc()
  66. raise CustomError(str(e))
  67. if not response_content:
  68. raise CustomError(u'支付宝请求失败!')
  69. response = AlipayTradeQueryResponse()
  70. response.parse_response_content(response_content)
  71. if not response.is_success():
  72. raise CustomError(response.code + "," + response.msg + "," + response.sub_code + "," + response.sub_msg)
  73. return response.buyer_pay_amount