支付宝支付,微信支付,苹果支付

parent 5fb080d7
from .alipayWap import alipay_transfer
if __name__ == '__main__':
print(alipay_transfer())
# -----------------------------------------------------------------------------
# File Name: alipayWap.py
# Author: X. Peng
# -----------------------------------------------------------------------------
# pip3 install alipay-python
# -----------------------------------------------------------------------------
# Imports
# -----------------------------------------------------------------------------
from alipay import AliPay
import ssl
import time
# -----------------------------------------------------------------------------
# Constants
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Functions
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Classes
# -----------------------------------------------------------------------------
alipay_public_key_string = ''''''
app_private_key_string = ''''''
APP_ID = ''
URL_PREFIX = ''
ssl._create_default_https_context = ssl._create_unverified_context
def init_alipay(notify_path='/webservice/notify'):
"""初始化alipay配置."""
alipay = AliPay(
appid=APP_ID,
app_notify_url=URL_PREFIX+notify_path,
app_private_key_string=app_private_key_string,
alipay_public_key_string=alipay_public_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥,
sign_type="RSA2", # RSA 或者 RSA2
debug=False # 默认False ,若开启则使用沙盒环境的支付宝公钥
)
return alipay
def prePay(subject, out_trade_no, total_amount, notify_path='/webservice/notify', return_path='/home/order'):
"""创建预付订单."""
result = init_alipay(notify_path).api_alipay_trade_wap_pay(
subject=subject,
out_trade_no=out_trade_no,
total_amount=total_amount,
return_url=URL_PREFIX + return_path
)
if not result:
return False
pay_url = 'https://openapi.alipay.com/gateway.do?' + result
return pay_url
def alipay_transfer():
"""转账"""
out_biz_no = time.strftime('%Y%m%d', time.localtime(time.time())) + str(int(time.time() * 1000))
payee_type = 'ALIPAY_LOGONID'
payee_account = '18916991859@163.com'
amount = '1'
kwargs = {
'payee_real_name': '',
'remark': ''
}
result = init_alipay().api_alipay_fund_trans_toaccount_transfer(out_biz_no, payee_type, payee_account, amount, **kwargs)
return result
# -*- encoding: utf-8 -*-
# -----------------------------------------------------------------------------
# @File Name : apple_pay.py
# @Time : 2020/11/24 下午4:15
# @Author : X. Peng
# @Email : acepengxiong@163.com
# @Software : PyCharm
# -----------------------------------------------------------------------------
import logging
import random
import uuid
import os
from flask import jsonify, session, request, current_app
from datetime import datetime, timedelta
import requests
import pickle
import json
import urllib
def apple_pay():
"""苹果支付"""
'''
"receipt-data":receipt_data,
"exclude-old-transactions":"true",
"password":"a1cdf6f00d3244aa9aa2c1c4a65b7ccf"
'''
data = request.get_data()
# print(data)
# data = data.decode('utf8','replace')
data = eval(data)
receipt_data = data["receipt-data"]
receipt_data = urllib.request.unquote(receipt_data)
print(receipt_data)
formdata = {
"receipt-data": receipt_data,
"exclude-old-transactions": "true",
"password": "a1cdf6f00d3244aa9aa2c1c4a65b7ccf"
}
# 正式验证地址 #测试验证地址
AppStore_URL = ["https://buy.itunes.apple.com/verifyReceipt", "https://sandbox.itunes.apple.com/verifyReceipt"]
dumped_json_string = json.dumps(formdata)
# 首先先去正式,如果是测试的话,就再去测试
response = requests.post(AppStore_URL[0], data=dumped_json_string)
if response.status_code == 200:
if response.json().get("status") == 21007:
print("ceshi")
response = requests.post(AppStore_URL[1], data=dumped_json_string)
if response.status_code == 200:
return response.json()
# print(response.json())
return response.json()
else:
return response.json()
# -----------------------------------------------------------------------------
# File Name: __init__.py
# Author: X. Peng
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Imports
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Constants
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Functions
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Classes
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# File Name: wx_pay.py
# Author: X. Peng
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Imports
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Constants
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Functions
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Classes
# -----------------------------------------------------------------------------
import requests
import hashlib
import time
from xml.etree import cElementTree as etree
import random
from urllib import parse
def genNonce_str():
"""."""
sss = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
s = ''
for i in range(32):
s = s + random.choice(sss)
return s
class WXPay(object):
"""微信公众号支付."""
pre_pay_prefix = 'https://open.weixin.qq.com/connect/oauth2/authorize'
appid = ''
redirect_uri_prefix = ''
response_type = 'code'
scope = 'snsapi_base'
@classmethod
def prePay(cls, order_no, redirect_path='/webservice/order'):
pay_url = cls.pre_pay_prefix + '?' + parse.urlencode({
'appid': cls.appid,
'redirect_uri': cls.redirect_uri_prefix + redirect_path,
'response_type': cls.response_type,
'scope': cls.scope,
'state': order_no
}) + '#wechat_redirect'
return pay_url
def __init__(self, code, out_trade_no, body, total_fee, remote_addr, notify_path='/webservice/notify', return_path='/home/order'):
"""."""
self.timeStamp = int(time.time())
self.req_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'
self.appid = ''
self.secret = ''
self.openid = None
self.mch_id = ''
self.nonce_str = genNonce_str()
self.sign = None
self.sign_type = 'MD5'
self.body = body
self.out_trade_no = out_trade_no
self.total_fee = int(total_fee * 100)
self.spbill_create_ip = remote_addr
self.notify_url = self.redirect_uri_prefix + notify_path
self.return_url = self.redirect_uri_prefix + return_path
self.trade_type = 'JSAPI'
self.key = ''
self.prepay_id = None
self.getOpenid(code)
self.getStringSign()
self.getData()
self.getprepay_id()
self.getPaySign()
def getOpenid(self, code):
"""."""
url = 'https://api.weixin.qq.com/sns/oauth2/access_token'
params = {
'appid': self.appid,
'secret': self.secret,
'code': code,
'grant_type': 'authorization_code'
}
res = requests.get(url, params=params)
self.openid = res.json()['openid']
def getStringSign(self):
"""."""
self.string_sign_temp = 'appid={0}&body={1}&mch_id={2}&nonce_str={3}&notify_url={4}&openid={5}&out_trade_no={6}&sign_type={7}&spbill_create_ip={8}&total_fee={9}&trade_type={10}&key={11}'.format(
self.appid,
self.body,
self.mch_id,
self.nonce_str,
self.notify_url,
self.openid,
self.out_trade_no,
self.sign_type,
self.spbill_create_ip,
self.total_fee,
self.trade_type,
self.key
)
def getData(self):
"""."""
self.sign = hashlib.md5(self.string_sign_temp.encode("utf-8")).hexdigest().upper()
self.data = {
'appid': self.appid,
'body': self.body,
'mch_id': self.mch_id,
'nonce_str': self.nonce_str,
'notify_url': self.notify_url,
'openid': self.openid,
'out_trade_no': self.out_trade_no,
'sign_type': self.sign_type,
'spbill_create_ip': self.spbill_create_ip,
'total_fee': self.total_fee,
'trade_type': self.trade_type,
'sign': self.sign
}
def dict2xml(self, dict_):
"""将dict转为要发送到微信服务器的xml格式."""
s = ""
for k, v in dict_.items():
s += "<{0}>{1}</{0}>".format(k, v)
s = "<xml>{0}</xml>".format(s)
return s.encode("utf-8")
def xml2dict(self, content):
"""将从微信服务器接收到的xml转为dict."""
raw = {}
root = etree.fromstring(content)
for child in root:
raw[child.tag] = child.text
return raw
def getprepay_id(self):
"""."""
res = requests.post(self.req_url, data=self.dict2xml(self.data))
res = self.xml2dict(res.content)
self.prepay_id = res['prepay_id']
def getPaySign(self):
"""."""
sign_string = 'appId={0}&nonceStr={1}&package=prepay_id={2}&signType={3}&timeStamp={4}&key={5}'.format(self.appid, self.nonce_str, self.prepay_id, self.sign_type, self.timeStamp, self.key)
self.paySign = hashlib.md5(sign_string.encode("utf-8")).hexdigest().upper()
def getUI(self):
"""."""
text = '''<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>微信支付</title>
</head>
<script src="https://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
<script type="text/javascript">
function onBridgeReady(){{
WeixinJSBridge.invoke(
'getBrandWCPayRequest', {{
"appId":"{0}", //公众号名称,由商户传入
"timeStamp":"{1}", //时间戳,自1970年以来的秒数
"nonceStr":"{2}", //随机串
"package":"prepay_id={3}",
"signType":"MD5", //微信签名方式
"paySign":"{4}" //微信签名
}},
function(res){{
if(res.err_msg == "get_brand_wcpay_request:ok" ){{
window.location.href='{5}';
// 使用以上方式判断前端返回,微信团队郑重提示:
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
}}
}});
}}
if (typeof WeixinJSBridge == "undefined"){{
if( document.addEventListener ){{
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
}}
else if (document.attachEvent){{
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
}}
}}
else{{
onBridgeReady();
}}
</script>
<body>
</body>
</html>'''.format(
self.appid,
self.timeStamp,
self.nonce_str,
self.prepay_id,
self.paySign,
self.return_url
)
return text
# -----------------------------------------------------------------------------
# File Name: wxh5pay.py
# Author: X. Peng
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Imports
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Constants
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Functions
# -----------------------------------------------------------------------------
# -----------------------------------------------------------------------------
# Classes
# -----------------------------------------------------------------------------
import requests
import hashlib
import time
from xml.etree import cElementTree as etree
import random
from urllib import parse
def genNonce_str():
"""."""
sss = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
s = ''
for i in range(32):
s = s + random.choice(sss)
return s
class WXPay(object):
"""微信H5支付."""
def __init__(self, out_trade_no, body, total_fee, remote_addr, notify_path='/webservice/notify', return_path='/home/order'):
"""线上:tamper.tanpuyun.com
测试:testtamper.tanpuyun.com"""
self.timeStamp = int(time.time())
self.req_url = 'https://api.mch.weixin.qq.com/pay/unifiedorder'
self.url_prefix = 'https://tamper.tanpuyun.com'
self.appid = 'wx95b0c12b47b758ac'
self.mch_id = '1515329071'
self.nonce_str = genNonce_str()
self.sign = None
self.sign_type = 'MD5'
self.body = body
self.out_trade_no = out_trade_no
self.total_fee = int(total_fee * 100)
self.spbill_create_ip = remote_addr
self.notify_url = self.url_prefix + notify_path
self.return_path = self.url_prefix + return_path
self.trade_type = 'MWEB'
self.key = 'eqwor3wquevncz9384ssp438oarefskl'
self.getStringSign()
self.getData()
# self.getPayUrl()
def getStringSign(self):
"""."""
self.string_sign_temp = 'appid={0}&body={1}&mch_id={2}&nonce_str={3}&notify_url={4}&out_trade_no={5}&sign_type={6}&spbill_create_ip={7}&total_fee={8}&trade_type={9}&key={10}'.format(
self.appid,
self.body,
self.mch_id,
self.nonce_str,
self.notify_url,
self.out_trade_no,
self.sign_type,
self.spbill_create_ip,
self.total_fee,
self.trade_type,
self.key
)
def getData(self):
"""."""
self.sign = hashlib.md5(self.string_sign_temp.encode("utf-8")).hexdigest().upper()
self.data = {
'appid': self.appid,
'body': self.body,
'mch_id': self.mch_id,
'nonce_str': self.nonce_str,
'notify_url': self.notify_url,
'out_trade_no': self.out_trade_no,
'sign_type': self.sign_type,
'spbill_create_ip': self.spbill_create_ip,
'total_fee': self.total_fee,
'trade_type': self.trade_type,
'sign': self.sign
}
def dict2xml(self, dict_):
"""将dict转为要发送到微信服务器的xml格式."""
s = ""
for k, v in dict_.items():
s += "<{0}>{1}</{0}>".format(k, v)
s = "<xml>{0}</xml>".format(s)
return s.encode("utf-8")
def xml2dict(self, content):
"""将从微信服务器接收到的xml转为dict."""
raw = {}
root = etree.fromstring(content)
for child in root:
raw[child.tag] = child.text
return raw
def getPayUrl(self):
"""."""
res = requests.post(self.req_url, data=self.dict2xml(self.data))
res = self.xml2dict(res.content)
print(res)
return res['mweb_url'] + '&' + parse.urlencode({'redirect_url': self.return_path})
if __name__ == '__main__':
out_trade_no = '201812102324324134134'
body = 'H5支付测试'
total_fee = 0.01
remote_addr = '101.95.188.178'
wx = WXPay(out_trade_no, body, total_fee, remote_addr)
pay_url = wx.getPayUrl()
print(pay_url)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment