首页 > 其他 > 详细

支付宝沙箱

时间:2021-04-20 13:37:48      阅读:27      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

 

# 支付宝支付

## 支付宝的沙箱环境

-   [密钥生成文档](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
-----BEGIN PUBLIC KEY-----
xxxx
-----END PUBLIC KEY-----
```

自己的APP私钥 (`app_private_key.pem`)

```python
-----BEGIN RSA2 PRIVATE KEY-----
xxxx
-----END RSA2 PRIVATE KEY-----
```

#### 支付宝的相关方法

>   不需要记。以后参考文档

```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复制到浏览器,就会打开支付宝支付页面

```

#### 视图

-   获取前端发送的订单id
-   查询订单id对应的订单信息
-   利用第三方包生成一个支付宝客户端
-   传入订单号、支付金额、回调参数、主题,生成一个支付接口
-   将生成的支付接口返回给Vue

```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})

```

Vue

-   对 支付 按钮,绑定方法
-   在方法中,发送请求,接收响应地址, 也就是支付宝的支付地址
-   跳转到支付宝支付页面
-   等待用户支付成功

```vue

```

 

支付宝沙箱

原文:https://www.cnblogs.com/gaogang/p/14680426.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!