python对接支付宝支付,python支付系统

  python对接支付宝支付,python支付系统

  注意:

  保存

  支付宝公钥(通过商户公钥生成)

  商户私钥

  settings.py中ALLOWED_HOSTS=[*]

  点击支付,发送邮政请求,提供商品信息及订单号(唯一标识),根据支付宝软件开发工具包(软件开发工具包)的配置,首先发送发送邮政请求,进行支付验证,支付成功后,根据订单号,修改订单状态,失败则不修改,然后展示支付结果,最后跳转回设定好的商户统一资源定位器页面

  根据当前用户的配置(支付时发送邮政请求的地址(用于验证支付成功与否),支付完成后跳转的商户地址,支付宝公钥,商户私钥),生成URL,并跳转到扫码支付页面。

  上面两个地址相当于回调函数()1.项目展示:

  2.扫码支付

  3.支付完成

  4.跳转成功

  一、注册账号

  https://openhome.alipay.com/platform/appDaily.htm?tab=info

  二、设置应用公钥

  私钥需要复制到程序里的:

  程序里面阿里的公钥在这里获取:

  、

  这里放的是阿里的公钥。

  代码实现:

  代码结构:

  1.首先是:更改程序里面的阿里公钥和用户私钥以及app_id

  2 .支付这是从饭桶上找到的支付宝支付接口(个人电脑端支付接口)

  3、

  一从日期时间导入日期时间

  2来自密码.公钥导入南非共和国(Republic of South Africa)

  3来自密码.签名导入PKCS1_v1_5

  四来自密码.哈希导入SHA256

  5从urllib.parse导入报价加

  6从urllib.parse导入urlparse,parse_qs

  七从base64导入解码字节,编码字节

  8导入数据

  9

  10类支付宝(对象):

  11

  12 支付宝支付接口(个人电脑端支付接口)

  13

  14

  15 def __init__(self,appid,app_notify_url,app_private_key_path,

  16支付宝_公钥_路径,返回_网址,调试=假):

  17 self.appid=appid

  18自我。应用程序通知URL=应用程序通知URL

  19自我。app _ private _ key _ path=app _ private _ key _ path

  20 self.app_private_key=无

  21 self.return_url=return_url

  22以打开(self.app_private_key_path)为fp:

  23自我。app _ private _ key=RSA导入密钥(FP。read())

  24自我。支付宝_公共_密钥_路径=支付宝_公共_密钥_路径

  25以开放(自我。支付宝_公钥_路径)为fp:

  26自我。支付宝_公钥=RSA.importKey(fp.read())

  27

  28如果调试为真:

  29自我_ _ gateway= https://开放API。支付宝dev。com/gateway。“做”

  30其他:

  31自我_ _ gateway= https://开放API。支付宝。com/gateway。“做”

  32

  33 def direct_pay(self,subject,out_trade_no,total_amount,return_url=None,**kwargs):

  34 biz_content={

  35"主题":主题,

  36 对外贸易编号:对外贸易编号,

  37 总额:总额,

  38 产品代码:快速交易支付,

  39 # qr_pay_mode:4

  40 }

  41

  42商务内容更新

  43数据=自身。build _ body(‘支付宝。贸易。页面。 pay ,biz_content,self.return_url

  44返回自我签名_数据(数据)

  45

  46 def build_body(self,method,biz_content,return_url=None):

  47数据={

  48 app_id: self.appid,

  49"方法":方法,

  50"字符集":" utf-8 ",

  51 符号类型: RSA2 ,

  52“时间戳”:datetime.now().strftime(%Y-%m-%d %H:%M:%S ),

  53 版本: 1.0 ,

  54"商务内容":商务内容

  55 }

  56

  57如果返回_url不为无:

  58数据[通知_url ]=self。应用程序_通知_ URL

  59 data[ return _ URL ]=self。返回_ URL

  60

  61返回数据

  62

  63 def sign_data(自身,数据):

  64 data.pop(符号,无)

  65 # 排序后的字符串

  66无符号项=self.ordered_data(数据)

  67 unsigned_string=" " .加入("{0}={1}"。format(k,v) for k,v in unsigned_items)

  68标志=自我。sign(unsigned _ string。编码( utf-8 ))

  69 # ordered _ items=自身。有序数据(数据)

  70 quoted_string= .加入("{0}={1}"。format(k,quote_plus(v)) for k,v in unsigned_items)

  71

  72 # 获得最终的订单信息字符串

  73 signed _ string=quoted _ string sign= quote _ plus(符号)

  74返回有符号字符串

  75

  76 def ordered_data(self,data):

  77 complex_keys=[]

  78 for key,value in data.items():

  79 if isinstance(value,dict):

  80 complex_keys.append(key)

  81

  82 # 将字典类型的数据倾销出来

  83对于复杂键中的键:

  84 data[key]=JSON。转储(数据[键],分隔符=(,,:))

  85

  86返回排序后的([(k,v for k,v in data.items()])

  87

  88定义符号(自身,无符号_字符串):

  89 # 开始计算签名

  90 key=self.app_private_key

  91 signer=PKCS1_v1_5.new(key)

  92签名=签名者。标志(沙256。new(无符号字符串))

  93 # base64编码,转换为采用双字节对字符进行编码表示并移除回车

  94符号=编码字节(签名)。解码( utf8 ).替换( \n ,)

  95返回标志

  96

  97定义_验证(自身、原始内容、签名):

  98 # 开始计算签名

  99键=自我。支付宝_公共密钥

  100 signer=PKCS1_v1_5.new(key)

  101 digest=SHA256.new()

  102文摘。更新(raw _ content。编码( utf8 ))

  103 if signer.verify(摘要,解码字节(签名。编码( utf8 ):

  104返回真

  105返回假

  106

  107定义验证(自身、数据、签名):

  108如果数据中有sign_type :

  109符号类型=数据。pop(符号类型)

  110 # 排序后的字符串

  111 unsigned _ items=自身。有序数据(数据)

  112消息=""。join(u{}={} .format(k,v) for k,v in unsigned_items)

  113回归自我。_验证(消息、签名)支付函数

  4.路由设置:

  从django.conf.urls导入全球资源定位器(Uniform Resource Locator)

  来自姜戈. contrib导入管理

  从app01导入视图

  urlpatterns=[

  url(r^admin/,管理网站网址),

  url(r^page1/,views.page1),

  url(r^index/,观点指数),

  url(r^page2/,views.page2),

  ]

  5.视图:

  快捷方式导入渲染,重定向,HttpResponse

  从utils.pay导入支付宝

  导入数据

  导入时间

  def ali():

  # 沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

  app_id=2016091100483151

  #帖子请求,用于最后的检测

  通知_ URL= http://127。0 .0 .1:8804/第2页/

  # notify _ URL= http://www。吴佩琪。com:8804/page 2/

  #获得请求,用于页面的跳转展示

  return _ URL= http://127。0 .0 .1:8804/第2页/

  # return _ URL= http://www。吴佩琪。com:8804/page 2/

  merchant _ private _ key _ path= keys/app _ private _ 2048。文本

  支付宝_公共_密钥_路径=密钥/支付宝_公共_2048.txt

  支付宝=支付宝(

  appid=app_id,

  应用程序_通知_ url=通知_url,

  返回_ url=返回_url,

  app _ private _ key _ path=merchant _ private _ key _ path

  支付宝_公钥_路径=支付宝_公钥_路径,#支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥

  调试=真,#默认假的,

  )

  退回支付宝

  定义索引(请求):

  return render(请求,“index.html”)

  定义第一页(请求):

  if request.method==GET :

  return render(请求,“index.html”)

  否则:

  钱=浮(请求POST.get(money ))

  支付宝=阿里()

  # 生成支付的全球资源定位器(统一资源定位器)

  query_params=支付宝。直接支付(

  subject=充气式韩红, # 商品简单描述

  out_trade_no=x2 str(time.time()),#商户订单号

  total _ amount=钱,#交易金额(单位:元保留俩位小数)

  )

  pay _ URL=https://openapi.alipaydev.com/gateway.do?{}.格式(查询参数)

  返回重定向(付费网址)

  定义第2页(请求):

  支付宝=阿里()

  if request.method==POST :

  # 检测是否支付成功

  # 去请求体中获取所有返回的数据:状态/订单号

  从urllib.parse导入parse_qs

  body _ str=请求。身体。解码(“utf-8”)

  post_data=parse_qs(body_str)

  post_dict={}

  对于post_data.items()中的k,v:

  post_dict[k]=v[0]

  打印(post_dict)

  sign=post_dict.pop(sign ,无)

  status=alipay.verify(post_dict,sign)

  打印(发布验证,状态)

  返回HttpResponse(POST返回)

  否则:

  参数=请求GET.dict()

  sign=params.pop(sign ,无)

  status=支付宝. verify(参数,签名)

  打印(获取验证,状态)

  返回HttpResponse(支付成功)

  6.模板

  标题

  {% csrf_token %}

  注意:安装秘密党员

  把安装包放到c:\ Users \ frank \ AppData \ Local \ Programs \ Python \ Python 36 \ Lib \ site-packages然后解压缩就行了。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • 支付宝号查看位置怎么查,支付宝号是什么位置能找到-
  • 支付宝账号可以更换几次,支付宝账户更名可以更几次
  • 支付宝一寸照片制作教程图片,支付宝一寸照片制作教程下载
  • 手机网页版支付宝,手机支付宝网页版官方网站
  • 支付宝怎么更换实名认证手机号不变,改了名字支付宝怎么更换实名认证
  • 支付宝智能服务卡有什么用处,支付宝智能服务卡有什么用吗
  • 支付宝年度账单哪里看2021动画,支付宝年度账单哪里看2020动画
  • 支付宝567消费券怎么领,支付宝618消费券怎么使用
  • 支付宝提现十万手续费多少钱一天,支付宝提现十万手续费多少钱一个月
  • 支付宝国际版健康码怎么申请打印,用支付宝怎么申请国际健康码
  • 支付宝删除登录痕迹方法有哪些,支付宝删除登录痕迹方法在哪
  • 怎样领取山桃皮肤,支付宝领猕猴桃在哪里
  • 怎么能删除支付宝余额明细,怎么可以删除支付宝余额的明细
  • 支付宝如何隐藏自己的真实姓名-,支付宝如何隐藏自己的真实姓名和电话
  • 支付宝余额宝10万一天收益多少,支付宝余额宝一千一天收益多少钱
  • 留言与评论(共有 条评论)
       
    验证码: