支付宝支付
## 支付宝的沙箱环境
- [密钥生成文档](https://opendocs.alipay.com/open/291/105971): 公钥(给别人,方便其他人验证某个信息是否为自己发送) 和私钥(需要自己保存,对信息加密,不能泄露)
- 根据文档,生成一对密钥: 公钥和私钥,将 公钥 添加到 支付宝的 [沙箱应用](https://openhome.alipay.com/platform/appDaily.htm)中
- 根据自己的APP公钥,生成的 支付宝公钥,需要 保存本地
> 支付宝接口: 不再自己写接口,而是 使用 python-alipay-sdk
工具去请求支付宝接口
>
> pip install pyhton-alipay-sdk
## 支付接口
### django
> 需要将 生成的 私钥 和 根据自己的公钥生成的 支付宝公钥,保存到文件,放到项目中
支付宝公钥(aliapy_pbulic_key.pem
)
python
</code></pre>
<p>自己的APP私钥 (<code>app_private_key.pem</code>)</p>
<pre><code class="language-python"></code></pre>
<h4>支付宝的相关方法</h4>
<blockquote>
<p>不需要记。以后参考文档</p>
</blockquote>
<pre><code class="language-python">import os
from alipay import AliPay
配置地址, 为了确定 公钥和私钥的 位置
private_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "key/app_private_key.pem")
public_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "key/alipay_public_key.pem")
获取公私钥字符串
app_private_key_string = open(private_path).read()
alipay_public_key_string = open(public_path).read()
def get_alipay():
"""生成支付宝的客户端"""
alipay = AliPay(
appid="2016092400585976", # 收款的商家支付宝的 appid
app_notify_url=None, # 默认回调url
app_private_key_string=app_private_key_string,
# 支付宝的公钥,验证支付宝回传消息使用,不是你自己的公钥
alipay_public_key_string=alipay_public_key_string,
sign_type="RSA2", # 加密方式
debug=True, # 上线则改为False , 沙箱True
)
return alipay
def get_alipay_url(order_id, order_amount, subject, return_url):
"""
根据订单信息,生成支付地址
"""
# 进行alipay初始化
alipay = get_alipay()
# 调用支付接口
# 电脑网站支付,需要跳转到https://openapi.alipay.com/gateway.do? + order_string
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=order_id, # 订单id,需要支付的订单id
total_amount=str(order_amount), # 订单总金额
subject=subject, # 付款标题信息
return_url=return_url, # 付款成功回调地址(可以为空, 当前项目,应该回调到Vue页面)
notify_url=None # 付款成功后异步通知地址(可以为空)
)
pay_url = "https://openapi.alipaydev.com/gateway.do?" + order_string
return pay_url # 将这个url复制到浏览器,就会打开支付宝支付页面
</code></pre>
<h4>视图</h4>
<ul>
<li>获取前端发送的订单id</li>
<li>查询订单id对应的订单信息</li>
<li>利用第三方包生成一个支付宝客户端</li>
<li>传入订单号、支付金额、回调参数、主题,生成一个支付接口</li>
<li>将生成的支付接口返回给Vue</li>
</ul>
<pre><code class="language-python">class PaymentAPIView(APIView):
authentication_classes = [JSONWebTokenAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request, order_id):
# 查询要支付的订单
user = request.user
try:
order = Order.objects.get(id=order_id, user=user)
except Exception as e:
return Response({'msg': '订单信息错误'}, status=404)
alipay_url = get_alipay_url(
order_id=order_id,
order_amount=order.amount,
subject="美多商城%s" % order_id,
# 支付成功,跳转到Vue的支付成功页面
return_url='http://127.0.0.1:8080/#/pay_success/'
)
return Response({'alipay_url': alipay_url})
</code></pre>
<p>Vue</p>
<ul>
<li>对 支付 按钮,绑定方法</li>
<li>在方法中,发送请求,接收响应地址, 也就是支付宝的支付地址</li>
<li>跳转到支付宝支付页面</li>
<li>等待用户支付成功</li>
</ul>
<pre><code class="language-vue">
</code></pre>
<p>
Original: https://www.cnblogs.com/gaogang/p/14680426.html
Author: 小高、
Title: 支付宝沙箱
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586048/
转载文章受原作者版权保护。转载请注明原作者出处!