热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python支付宝自动支付_python支付宝支付流程

1.项目展示:2.扫码支付3.支付完成4.跳转成功一、注册账号https:openhome.alipay.complatformappDaily.htm?tabinf

1.项目展示:

2.扫码支付

3.支付完成

4.跳转成功

一、注册账号

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

二、设置应用公钥

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

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

这里放的是阿里的公钥。

代码实现:

代码结构:

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

2.pay.py 这是从git上找到的支付宝支付接口(PC端支付接口)

3、

1 from datetime importdatetime2 from Crypto.PublicKey importRSA3 from Crypto.Signature importPKCS1_v1_54 from Crypto.Hash importSHA2565 from urllib.parse importquote_plus6 from urllib.parse importurlparse, parse_qs7 from base64 importdecodebytes, encodebytes8 importjson9

10 classAliPay(object):11 """

12 支付宝支付接口(PC端支付接口)13 """

14

15 def __init__(self, appid, app_notify_url, app_private_key_path,16 alipay_public_key_path, return_url, debug=False):17 self.appid =appid18 self.app_notify_url =app_notify_url19 self.app_private_key_path =app_private_key_path20 self.app_private_key =None21 self.return_url =return_url22 with open(self.app_private_key_path) as fp:23 self.app_private_key =RSA.importKey(fp.read())24 self.alipay_public_key_path =alipay_public_key_path25 with open(self.alipay_public_key_path) as fp:26 self.alipay_public_key =RSA.importKey(fp.read())27

28 if debug isTrue:29 self.__gateway = "https://openapi.alipaydev.com/gateway.do"

30 else:31 self.__gateway = "https://openapi.alipay.com/gateway.do"

32

33 def direct_pay(self, subject, out_trade_no, total_amount, return_url=None, **kwargs):34 biz_content ={35 "subject": subject,36 "out_trade_no": out_trade_no,37 "total_amount": total_amount,38 "product_code": "FAST_INSTANT_TRADE_PAY",39 #"qr_pay_mode":4

40 }41

42 biz_content.update(kwargs)43 data = self.build_body("alipay.trade.page.pay", biz_content, self.return_url)44 returnself.sign_data(data)45

46 def build_body(self, method, biz_content, return_url=None):47 data ={48 "app_id": self.appid,49 "method": method,50 "charset": "utf-8",51 "sign_type": "RSA2",52 "timestamp": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),53 "version": "1.0",54 "biz_content": biz_content55 }56

57 if return_url is notNone:58 data["notify_url"] =self.app_notify_url59 data["return_url"] =self.return_url60

61 returndata62

63 defsign_data(self, data):64 data.pop("sign", None)65 #排序后的字符串

66 unsigned_items =self.ordered_data(data)67 unsigned_string = "&".join("{0}={1}".format(k, v) for k, v inunsigned_items)68 sign = self.sign(unsigned_string.encode("utf-8"))69 #ordered_items = self.ordered_data(data)

70 quoted_string = "&".join("{0}={1}".format(k, quote_plus(v)) for k, v inunsigned_items)71

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

73 signed_string = quoted_string + "&sign=" +quote_plus(sign)74 returnsigned_string75

76 defordered_data(self, data):77 complex_keys =[]78 for key, value indata.items():79 ifisinstance(value, dict):80 complex_keys.append(key)81

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

83 for key incomplex_keys:84 data[key] = json.dumps(data[key], separators=(',', ':'))85

86 return sorted([(k, v) for k, v indata.items()])87

88 defsign(self, unsigned_string):89 #开始计算签名

90 key =self.app_private_key91 signer =PKCS1_v1_5.new(key)92 signature =signer.sign(SHA256.new(unsigned_string))93 #base64 编码,转换为unicode表示并移除回车

94 sign = encodebytes(signature).decode("utf8").replace("\n", "")95 returnsign96

97 def_verify(self, raw_content, signature):98 #开始计算签名

99 key =self.alipay_public_key100 signer =PKCS1_v1_5.new(key)101 digest =SHA256.new()102 digest.update(raw_content.encode("utf8"))103 if signer.verify(digest, decodebytes(signature.encode("utf8"))):104 returnTrue105 returnFalse106

107 defverify(self, data, signature):108 if "sign_type" indata:109 sign_type = data.pop("sign_type")110 #排序后的字符串

111 unsigned_items =self.ordered_data(data)112 message = "&".join(u"{}={}".format(k, v) for k, v inunsigned_items)113 return self._verify(message, signature)

支付函数

4.路由设置:

from django.conf.urls importurlfrom django.contrib importadminfrom app01 importviews

urlpatterns=[

url(r'^admin/', admin.site.urls),

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

url(r'^index/', views.index),

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

]

5.视图:

from django.shortcuts importrender, redirect, HttpResponsefrom utils.pay importAliPayimportjsonimporttimedefali():#沙箱环境地址:https://openhome.alipay.com/platform/appDaily.htm?tab=info

app_id = "2016091100483151"

#POST请求,用于最后的检测

notify_url = "http://127.0.0.1:8804/page2/"

#notify_url = "http://www.wupeiqi.com:8804/page2/"

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

return_url = "http://127.0.0.1:8804/page2/"

#return_url = "http://www.wupeiqi.com:8804/page2/"

merchant_private_key_path= "keys/app_private_2048.txt"alipay_public_key_path= "keys/alipay_public_2048.txt"alipay=AliPay(

appid=app_id,

app_notify_url=notify_url,

return_url=return_url,

app_private_key_path=merchant_private_key_path,

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

debug=True, #默认False,

)returnalipaydefindex(request):return render(request,'index.html')defpage1(request):if request.method == "GET":return render(request, 'index.html')else:

money= float(request.POST.get('money'))

alipay=ali()#生成支付的url

query_params =alipay.direct_pay(

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

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

total_amount=money, #交易金额(单位: 元 保留俩位小数)

)

pay_url= "https://openapi.alipaydev.com/gateway.do?{}".format(query_params)returnredirect(pay_url)defpage2(request):

alipay=ali()if request.method == "POST":#检测是否支付成功

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

from urllib.parse importparse_qs

body_str= request.body.decode('utf-8')

post_data=parse_qs(body_str)

post_dict={}for k, v inpost_data.items():

post_dict[k]=v[0]print(post_dict)

sign= post_dict.pop('sign', None)

status=alipay.verify(post_dict, sign)print('POST验证', status)return HttpResponse('POST返回')else:

params=request.GET.dict()

sign= params.pop('sign', None)

status=alipay.verify(params, sign)print('GET验证', status)return HttpResponse('支付成功')

6.模板

Title{% csrf_token %}

注意:安装Crypto

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

https://blog.csdn.net/sc_lilei/article/details/80450859



推荐阅读
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 使用正则表达式爬取36Kr网站首页新闻的操作步骤和代码示例
    本文介绍了使用正则表达式来爬取36Kr网站首页所有新闻的操作步骤和代码示例。通过访问网站、查找关键词、编写代码等步骤,可以获取到网站首页的新闻数据。代码示例使用Python编写,并使用正则表达式来提取所需的数据。详细的操作步骤和代码示例可以参考本文内容。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
author-avatar
聪头丶_505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有