关于py支付的资源

https://www.cnblogs.com/mxhmxh/p/10763313.html
https://blog.csdn.net/qq_37193537/article/details/89497071
https://github.com/minibear2021/wechatpayv3 【推荐】

v3支付

# from Crypto.PublicKey import RSA
# import random
# from Crypto.Signature import PKCS1_v1_5
# from Crypto.Hash import SHA256
# import base64
# import time
import time
import random
from Cryptodome.PublicKey import RSA
from Cryptodome.Signature import pkcs1_15 as PKCS1_v1_5
from Cryptodome.Hash import SHA256
import base64class Authorization(object):def __init__(self):self.mchid = '1431536202'self.serial_no = '证书序列号'# 生成欲签名字符串def sign_str(self, method, url_path, timestamp, nonce_str, request_body):if request_body:# POSTsign_list = [method,url_path,timestamp,nonce_str,request_body]return '\n'.join(sign_list) + '\n'else:# GETsign_list = [method,url_path,timestamp,nonce_str]return '\n'.join(sign_list) + '\n\n'# 生成随机字符串def getNonceStr(self):data = "123456789zxcvbnmasdfghjklqwertyuiopZXCVBNMASDFGHJKLQWERTYUIOP"nonce_str = ''.join(random.sample(data, 30))return nonce_str# 生成签名def sign(self, sign_str):with open(r'./rsa_private_key.pem', 'r')as f:# 这里要注意的秘钥只能有三行# -----BEGIN PRIVATE KEY-----# ******************秘钥只能在一行,不能换行*****************# -----END PRIVATE KEY-----private_key = f.read()f.close()pkey = RSA.importKey(private_key)h = SHA256.new(sign_str.encode('utf-8'))signature = PKCS1_v1_5.new(pkey).sign(h)sign = base64.b64encode(signature).decode()return sign# 生成 Authorizationdef authorization(self, method, url_path, nonce_str, timestamp, body=None):# 加密子串signstr = self.sign_str(method=method, url_path=url_path, timestamp=timestamp, nonce_str=nonce_str,request_body=body)# print("加密原子串:" + signstr)# 加密后子串s = self.sign(signstr)# print("加密后子串:" + s)authorization = 'WECHATPAY2-SHA256-RSA2048 ' \'mchid="{mchid}",' \'nonce_str="{nonce_str}",' \'signature="{sign}",' \'timestamp="{timestamp}",' \'serial_no="{serial_no}"'. \format(mchid=self.mchid,nonce_str=nonce_str,sign=s,timestamp=timestamp,serial_no=self.serial_no)return authorizationif __name__ == '__main__':method = "POST"url_path = "/v3/pay/transactions/jsapi"timestamp = str(int(time.time()))nonce_str = Authorization().getNonceStr()body = "{'appid': '*********', 'mchid': '**********', 'description': '爱奇艺周卡', 'out_trade_no': 'LY1111111111', 'notify_url': '******', 'amount': {'total': 100, 'currency': 'CNY'}, 'payer': {'openid': '***************'}}"authorization = Authorization().authorization(method=method, url_path=url_path, nonce_str=nonce_str,timestamp=timestamp)print(authorization)import requestsdef to_json(kwargs):import jsonreturn json.dumps(kwargs, separators=(',', ':'))def requests_wx3(data, authorization, key_path="", cert_path=""):"""apiV3 版本的微信支付请求"""headers = {'Content-Type': 'application/json', 'Accept': 'application/json', 'Authorization': authorization}response = requests.post(url, data=to_json(data), headers=headers, cert=(cert_path, key_path))print(response.text)print(requests_wx3(url='https://api.mch.weixin.qq.com/v3/pay/transactions/app', ))

安卓支付

import time
import random
from Cryptodome.PublicKey import RSA
from Cryptodome.Signature import pkcs1_15
from Cryptodome.Hash import SHA256
from base64 import b64encodemchid = '1431536202'
serial_no = '001'
with open(r'./rsa_private_key.pem', 'r')as f:private_key = f.read()
# private_key = "-----BEGIN PRIVATE KEY-----\n" \
#               "NIIEvgIBADANBgkqhkiG9w0B3QEFAA5CBKgwggSkAgEAAoIBAQC2l/hfX5g6qjo7" \
#               "BcqTa+LldQpd7m4ZZEKT2BxUpYPNJ/YoZO1c3qB/+CfQQlKJYPseOsTnUeuAZ2AG" \
#               "z2LWuh/36gmiFX2Nw1pI0AkVwec8pB1+IqLGHzRsAaDJ++2J88TcWOuM5lOcBr6I" \
#               "VJOyl1ghYB4Dnuk2uid46rAZwWL3L2FZ+ktfdtePt4zOQrpILRuDNzR6TOcd1JER" \
#               "ylt8iDyoVTr69ALnQdhoNnofnrBK3R4sY5ON1BR01DpZM8yX8mmb6yOLjp1VoP+5" \
#               "n8pCPVAqZJEbwfDH90naeMZLYfoCvdaJhxHLblviZN7v4VW6Fx/W43O9sRTNPukU" \
#               "W5pLBP57AgMBAAECggEBAI9U6iZLzx62A7HTUPq6ZMkEQB2OEyUhe9W8fjjAGJ9R" \
#               "8DwzRdRx+gGaVf54IXwvwdAwB+MhfkE0ZL/Tyd2PC4s7j0ZJol5G7Ddd/tOye4cx" \
#               "uOkL3USyuB7UhFgpx4RT88OYlYbsQtOmw6gW5D376bWBUu46rw1Dwbp8V7JQCRTJ" \
#               "K+vbMj1ytgP10fg/hTQNe7RWmd+KC+OGZbBH6MxybLoR+BOwQQpwGEgoEoY9Rmlm" \
#               "E/8poPvdY/PLIaS2ca/rsgJ/ZhiSx6BL0DAqVkKtM9U9T0LRoZmJcCp6YgLKGA0X" \
#               "BrnbMXczFHFVfjmK1jw4UqWbPICsrbhF4dtIuSqZbDECgYEA4M8J4T/grNaNhQTc" \
#               "x6q/ylFZB3I8Qoih2YeLx7/JOBEL66jNJhHVrgyF8JChlL0J8RGMg8KdxzZ0OTEw" \
#               "Q5ZK4mo93cxwqFh87X4KUNaicNveCsxuEL80Bbhst7NmJKi5T2VQMR9kFd+eTwx8" \
#               "c5aOHX5W4RIogKyNHqvCdEqHohMCgYEAz+1/NfRtqI2F68olrtdlbReaHtlCZxRJ" \
#               "3XhaIT5OGjXE/0upRRx6EgDh4f+wvqpFdlutPHFTSz4H/5rBGyZ7NJ5D44WO3Z7K" \
#               "SdY3YJ+5J6Nu+2OX6FGZWmqyW9kgYRthzClqNduBWbgu0gRC8R8wLg1W7xe9HN5e" \
#               "bc0HnhnBfvkCgYBSNMNbH/2rlkVn1/BX/yNk+zxAEdDhT49HuV4u6/3Lx8gBI9fo" \
#               "zOrDW4b7AhhkCICDK7SjVd5WQ55ab5dDj8jQZK384Q5tMPZ17fodt27tMClQ75Js" \
#               "A08lrFvtDOg6DbK9ysF5RQ5XRU9hfqJfrjVHqbRhVz+CVhbAmXRhDAPvC5KBgQCX" \
#               "kXuCvCvXi1qNF+1CN3eS/3p0dFEITOzPSXUB+KX8SyfQJbo9S9XcG9KM6NNRGVPL" \
#               "RGbSwZVDKvOvqoKLpRB4ucmpJ+mNubuh+Uqi36ubrnIvRFkum5TbKR3dADivMMOo" \
#               "jKQEoH75BN70bvDRTbfUShsN8ZAA5EQXbDbaU9IOGQKBgEr+xQMksLCif8GrwlfJ" \
#               "Vrf3uyXTyY1QVRAGy9UIiM0RnsWDaGcRgNaz1K9YV3gqm7qHe2y8fzB0PLLw2TzY" \
#               "GUwxIttKpnEVlX1M59nmGFmQq08YNC+JRHZrvmmB0MyEBSA9lg0ugASdQQC5PGYa" \
#               "Rnn7p8VlUEauVmFpF6BTVZLQ\n" \
#               "-----END PRIVATE KEY-----"
timestamp = str(int(time.time()))
nonce_str = str(random.randint(100000, 10000000))def sign_str(method, url_path, request_body):"""生成欲签名字符串"""sign_list = [method,url_path,timestamp,nonce_str,request_body]return '\n'.join(sign_list) + '\n'def sign(sign_str):"""生成签名"""rsa_key = RSA.importKey(private_key)signer = pkcs1_15.new(rsa_key)digest = SHA256.new(sign_str.encode('utf8'))sign = b64encode(signer.sign(digest)).decode('utf8')return signdef authorization(method, url_path, request_body):"""生成Authorization"""signstr = sign_str(method, url_path, request_body)s = sign(signstr)authorization = 'WECHATPAY2-SHA256-RSA2048  ' \'mchid="{mchid}",' \'nonce_str="{nonce_str}",' \'signature="{sign}",' \'timestamp="{timestamp}",' \'serial_no="{serial_no}"'.\format(mchid=mchid,nonce_str=nonce_str,sign=s,timestamp=timestamp,serial_no=serial_no)return authorizationif __name__ == '__main__':print(authorization('POST', '/v3/marketing/favor/users/openid/coupons', '{"stock_id":"123","stock_creator_mchid":"1302430101","out_request_no":"20190522_001","appid":"your appid"}'))# Authorization WECHATPAY2-SHA256-RSA2048 mchid="1312030806",nonce_str="f0wwnSIuQN8yDr0U4bYKNmUgALcMUCLM",sig# nature="dcFTPfaAewd+UXuXv+VA+KeGW1coUG68PtklWtsMiFGal5GxiljGUVGV60gBnIo2La1R3cxf7mOb62q7xoab9mP1SZ5dP8L+amQ# 9vyl+ZYTaJOg31vtkDwMU0ILNqy96SuKy+5/Q2NSCQU0fBLMWU11vbSoA2ycEsCjDEknc8Hiw+vyKkV6iGyUNBMizfwZhJWdRcWDWeyxAy# 0rsaZKVOpeEyJ2xPQnLX8uB+gqCIO5+vE8KYjseXPGun+Zr6i5gl7i0O/BdBfY4BDRAZsrF5v7LikptEbRwJ8+1IevIT5LaUc5J5BnGM00# 9BuzsZzK8cphhKvepVmA8Gy0gWvfDeA==",timestamp="1592375315",serial_no="14DFFAAAA79AF4BD56CC1O55E06246E95D3PAAS0"

python --微信v3支付相关推荐

  1. 微信V3支付 订单查询 退款查询

    本编在对接V3支付的时候连连撞头,希望后来人能少走点弯路,如果有bug请海涵啊,希望各位大佬也能给我点意见,话不多说上代码: service层 package com.tiyaa.mall.pay.s ...

  2. 微信v3支付【php】

    微信v3支付 加载guzzlehttp和wechatpay的composer包 案例 目前只使用到jsapi支付.其他支付尚未尝试,如有bug请自己调试. 加载guzzlehttp和wechatpay ...

  3. 微信v3支付签名 java main方法测试成功

  4. 微信Native支付V3版本

    微信Native支付V3版本 微信支付在开发之前也是需要进行商户接入的 接入文档链接: https://pay.weixin.qq.com/index.php/core/home/login Nati ...

  5. python 微信支付接口 详解_Python支付接口汇总大全(包含微信、支付宝等,长期更新、欢迎补充)...

    wzhifuSDK- 由微信支付SDK 官方PHP Demo移植而来,v3.37下载地址 学习Python中有不明白推荐加入交流群 号:864573496 群里有志同道合的小伙伴,互帮互助, 群里有不 ...

  6. 微信h5支付python版

    微信h5支付python版 最近闲暇,整理下微信支付,根据官方文档进行的. 官方配置文件这里就不多说了, tornado感觉方便快捷,所以就用这个整理处理一份.经由django改编. 文档结构 进入. ...

  7. 微信h5支付 php sdk_微信支付V3版,H5,APP微信支付PHP服务端使用方式

    使用步骤: 1.导入下载好的微信V3版本SDK public function __construct() { parent::__construct(); //引入微信支付 Vendor('Wxpa ...

  8. java集成微信支付接口(微信V3版)

    吐槽下: 经常有人问我,你不是在某软件公司么?我听说大公司都是JAVA,对吗? 我只想回答,那是网上流传的骗人的传说,据我所知公司开发组大部分都是C#,少部分用JAVA. 这不,官方提供那个Demo就 ...

  9. python微信、支付宝聚合支付说明文档

    python在线聚合支付SDK 微信.支付宝二维码聚合SDK下载 点我下载 一.概述 一个二维码,用户可以使用微信.支付宝扫码支付. 1.设置支付金额,生成二维码 2.用户扫码 3.判断扫码来源 4. ...

最新文章

  1. Scala 与设计模式(一):Singleton 单例模式
  2. 一般计算 【2007】三3 C++版
  3. 谨慎使用PHP的引用
  4. 騰訊大廈有39層的問題解決方案。
  5. 线程间通信的两种方式
  6. IntelliJ IDEA2018配置SVN及常见问题解决
  7. dsst跟踪算法源码分析
  8. LVS的DR模实战演示
  9. Qt QWidget实现手势缩放和平移(一)
  10. java yield方法_Java中的yield方法
  11. Pytorch 多GPU数据并行(DataParallel)
  12. java关于方法覆盖的叙述_以下关于方法覆盖的叙述中正确的是( )
  13. 网页在线PS网站源码PHP 浏览器在线P图
  14. Pycharm:解决点击重运行(Rerun)没有反应
  15. PHP中利用PHPMailer配合QQ邮箱实现发邮件
  16. caffe2 安装填坑ing
  17. 最重要Python面试题,逻辑题,Python与数学之美
  18. 李建忠设计模式之”数据结构“模式
  19. 生日祝福html_说祝福 | 祝4月的你生日快乐
  20. Oracle命令行工具基本操作及SQL 命令

热门文章

  1. 5G给医疗行业带来哪些变化?
  2. 紫光展锐驱动之sensorhub调试
  3. sd卡数据恢复是如何恢复删除相片的
  4. 【Android 源码学习】 init启动
  5. 第十章_多线程(2)_线程池原子性并发工具类
  6. 使用Visual Studio 进行Flex 开发:Ensemble Introduces Tofino
  7. Chat GPT介绍
  8. @ConditionalOnMissingBean
  9. 文本标注十要点 | NLP基础
  10. 重温马丁路德金的经典演讲 I Have a Dream