PayUtil.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # -*- encoding: utf-8 -*-
  2. """
  3. @File : PayUtil.py
  4. @Time : 2022/6/29 11:41
  5. @Author : stephen
  6. @Email : zhangdongming@asj6.wecom.work
  7. @Software: PyCharm
  8. """
  9. from urllib.parse import quote
  10. from Ansjer.config import SERVER_DOMAIN_SSL
  11. from Object.AliPayObject import AliPayObject
  12. from Object.WechatPayObject import WechatPayObject
  13. """
  14. 支付服务
  15. """
  16. class PayService:
  17. @staticmethod
  18. def create_alipay_payment(passback_params, order_id, price, title, notify_url, content, response):
  19. """
  20. 创建支付宝支付
  21. @param passback_params: 携带参数支付宝回调原样返回
  22. @param order_id: 订单编号
  23. @param price: 价格
  24. @param title: 标题
  25. @param notify_url: 异步回调通知URL
  26. @param content: 内容
  27. @param response: 响应结果
  28. @return: 网站支付链接
  29. """
  30. aliPayObj = AliPayObject()
  31. alipay = aliPayObj.conf()
  32. subject = title + content
  33. order_string = alipay.api_alipay_trade_wap_pay(
  34. out_trade_no=order_id,
  35. total_amount=price,
  36. subject=subject,
  37. return_url="{}web/paid2/success.html".format(SERVER_DOMAIN_SSL),
  38. notify_url="{}{}".format(SERVER_DOMAIN_SSL, notify_url),
  39. quit_url="{}web/paid2/fail.html".format(SERVER_DOMAIN_SSL),
  40. passback_params=quote(passback_params)
  41. )
  42. if not order_string:
  43. return response.json(10, '生成订单错误.')
  44. return aliPayObj.alipay_prefix + order_string
  45. @staticmethod
  46. def create_wechat_payment(attach, order_id, price, ip, notify_url, content, response):
  47. """
  48. 创建微信支付
  49. @param attach: 参数微信回调通知原样返回
  50. @param order_id: 订单编号
  51. @param price: 价格
  52. @param ip: 用户支付ip地址
  53. @param notify_url: 异步通知回调URL
  54. @param content: 内容
  55. @param response: 响应结果
  56. @return: 网站支付链接
  57. """
  58. notify_url = "{}{}".format(SERVER_DOMAIN_SSL, notify_url)
  59. pay = WechatPayObject()
  60. # 统一调用接口
  61. pay.get_parameter(order_id, content, float(price) * 100, ip, notify_url, quote(attach))
  62. sign_params = pay.re_finall(orderid=order_id)
  63. if not sign_params:
  64. return response.json(10, '生成订单错误.')
  65. return sign_params
  66. @staticmethod
  67. def get_two_float(f_str, n):
  68. # f_str = '{}'.format(f_str) 也可以转换为字符串
  69. f_str = str(f_str)
  70. a, b, c = f_str.partition('.')
  71. # 如论传入的函数有几位小数,在字符串后面都添加n为小数0
  72. c = (c + "0" * n)[:n]
  73. return ".".join([a, c])