详解基于python-django框架的支付宝支付案例

一. 开发前的准备

1. 必须了解的知识

  • SDK:软件开发工具包,可以为开发者提供快速开发的工具
  • 沙箱环境:也就是测试环境
  • 支付宝支付金额的精度:小数点后两位(面试)

支付宝用的什么加密方式:RSA

2. 沙箱环境的配置

① 登录支付宝开放平台

https://auth.alipay.com/login/ant_sso_index.htm?goto=https%3A%2F%2Fopen.alipay.com%2Fplatform%2Fhome.htm

② 进入管理中心后选择研【研发服务】

③ 生成RSA密钥

选择【查看应用公钥】

选择【查看应用公钥生成方法】

下载秘钥生成工具

链接已经找好了,windows的用户直接下载: https://ideservice.alipay.com/ide/getPluginUrl.htm?clientType=assistant&platform=win&channelType=WEB

安装后打开工具直接选择【生成秘钥】

④ 将生成的 应用公钥 输入表单中,选择【保存】,系统会根据输入的 应用公钥 自动生成 支付宝公钥 ,可以选择【设置/查看】

⑤下载沙箱钱包APP,用于 支付测试

注意:生成秘钥工具生成的 应用公钥 是用来生成 支付宝公钥 ,剩下一个 应用私钥 注意保存。

3. 开发环境介绍

  • 操作系统:Win10
  • 编辑器:PyCharm 2019.2
  • 调试:Chrome 77.0.3865.75
  • Python版本:Python 3.7.x
  • Django版本:Django 2.2.5

4. 支付宝支付流程

用户点击支付时,网站根据支付宝的 APPID / 网关 / 支付宝公钥私钥 / SDK生成地址,再根据生成的地址,让用户跳转到支付宝进行支付。用户支付完成后,支付宝会给网站发送两个请求,分别是get和post请求。get请求是从支付宝网站跳转到自己的网站,post请求是向自己的网站发送支付相关的信息,网站可以凭借这些信息去修改网站订单的状态。

二. 开发实施流程

1. 商品数据表的创建

model.py

from django.db import models

# Create your models here.
class Goods(models.Model):
  goods_name = models.CharField(max_length=32)
  goods_price = models.FloatField()

class Order(models.Model):
  order_number = models.CharField(max_length=64)
  status_choices = ((0, '未支付'), (1, '已支付'))
  order_status = models.IntegerField(choices=status_choices, default=0)
  goods = models.ForeignKey(to='Goods', on_delete=models.CASCADE)

在Terminal中执行 python manage.py makemigrations 和 python manage.py migrate ,或者到工程目录下执行这两条指令,完成建表。

C:\Users\thanlon\PycharmProjects\alipay_django>python manage.py makemigrations
C:\Users\thanlon\PycharmProjects\alipay_django>python manage.py migrate

2. 购物车视图的构建

向商品表插入数据

构建商品信息页面

urls.py :

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
  path('admin/', admin.site.urls),
  path('goods/', views.goods),
]

views.py :

from django.shortcuts import render
from app import models

# Create your views here.
def goods(request):
  goods_list = models.Goods.objects.all()
  # print(goods_list)
  # <QuerySet [<Goods: Goods object (1)>, <Goods: Goods object (2)>, <Goods: Goods object (3)>, <Goods: Goods object (4)>]>
  return render(request, 'goods.html', {'goods_list': goods_list})

goods.html :

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
     content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>商品信息</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
     integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
  <div class="row" style="margin-top: 10px">
    <h4 style="text-align: center;font-weight: bold">Django支付宝支付案例</h4>
  </div>
  <div class="row" style="margin-top: 10px">
    <div class="col-md-4 col-md-offset-4">
      <table class="table table-bordered">
        {% for row in goods_list %}
          <tr style="text-align: center">
            <td>{{ row.id }}</td>
            <td>{{ row.goods_name }}</td>
            <td>{{ row.goods_price }}</td>
            <td><a href="/purchase/{{ row.id }}">购买</a></td>
          </tr>
        {% endfor %}
      </table>
    </div>
  </div>
</div>
<div class="container-fluid" style="color: #b2bcc5;margin-top: 20px;margin-bottom: 2px">
  <div class="row">
    <div class="col-md-12 text-center" style="padding: 40px">
      Copyright © 2019-2020 蓝色旗帜 版权所有 
      <a target="_blank_" href="http://www.miit.gov.cn/" style="color:#b2bcc5;">豫ICP备19014367号-1</a>
    </div>
  </div>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
    crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"
    integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa"
    crossorigin="anonymous"></script>
</html>

3. 订单支付

① 把生成好的应用私钥和支付宝公钥以及支付宝网站支付接口 pay.py 也放在项目根目录下,如下图所示:

② 安装pycryptodome模块

pip install pycryptodome ,接口依赖于该加密模块。

③ 添加路由

urls.py :

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
  path('admin/', admin.site.urls),
  path('goods/', views.goods),
  path('purchase/<goods_id>/', views.purchase),
]

④ 编写订单支付逻辑

views.py :

from django.shortcuts import render, redirect
from app import models
import uuid
from utils.pay import AliPay

# Create your views here.
def goods(request):
  goods_list = models.Goods.objects.all()
  # print(goods_list)
  # <QuerySet [<Goods: Goods object (1)>, <Goods: Goods object (2)>, <Goods: Goods object (3)>, <Goods: Goods object (4)>]>
  return render(request, 'goods.html', {'goods_list': goods_list})

def purchase(request, goods_id):
  '''
  订单支付
  :param request:
  :param goods_id:传过来的商品id
  :return:跳转到支付宝支付页面
  '''
  # 获取商品信息,因为向支付宝接口发送请求的时候需要携带该商品相关信息
  obj_goods = models.Goods.objects.get(pk=goods_id) # pk就是商品的标识,等价于使用id
  '''
  生成订单
  '''
  order_number = str(uuid.uuid4())
  # print(order_number) # bd9ee7fe-aca5-449d-acd1-63bcd8e30cde
  models.Order.objects.create(
    order_number=order_number,
    goods=obj_goods, # 或者goods_id=obj_goods.id
  )
  '''
  跳转到支付宝支付页面
  '''
  # 实例化对象
  alipay = AliPay(
    appid='2016101200668044',
    app_notify_url=' ', # 支付宝发送支付状态信息的地址,支付宝会向这个地址发送post请求,可以先不写但是必须有内容(我这里用的是空格)
    return_url=' ', # 将用户浏览器地址重定向回原来的地址,支付宝会向这个地址发送get请求,可以先不写但是必须有内容
    alipay_public_key_path='keys/alipay_public_2048.txt', # 支付宝公钥
    app_private_key_path='keys/app_private_2048.txt', # 应用私钥
    debug=True, # 默认是True代表测试环境,False代表正式环境
  )
  # 定义请求地址传入的参数
  query_params = alipay.direct_pay(
    subject=obj_goods.goods_name, # 商品的简单描述
    out_trade_no=order_number, # 商品订单号
    total_amount=obj_goods.goods_price, # 交易金额(单位是元,保留两位小数)
  )
  # 需要跳转到支付宝的支付页面,所以需要生成跳转的url
  pay_url = 'https://openapi.alipaydev.com/gateway.do?{0}'.format(query_params)
  return redirect(pay_url)

成功跳转到支付页面:

订单表生成数据:

4. 订单状态的更新

① 编写视图函数show_msg来接收支付宝的发送过来的get请求

支付成功后,支付宝向我们指定的地址发送get请求,也就从支付宝回到我们自己的网站。我们需要根据请求附带的信息,如:

http://106.12.115.136:5000/show_msg/?charset=utf-8&out_trade_no=fc4252b0-b0a4-480a-bd83-aaaca3745378&method=alipay.trade.page.pay.return&total_amount=369.00&sign=Is%2FhB%2FmO2c64JerilFTYTwk%2BlR%2FHoCE1E5EOdzZ0DIotykMBuXB0023z0XpmsNq3kKutAF%2FbVusrsrdqUwPeRX%2F4nYphZOWHdrQUYVkY%2BsOdAJl1hfuVRySRBwYVTnbNJpQpnHJb9uQtFRcaktvgrGZKdd3gZCETf90l12JEsG7ishPgvsYIJVvI1VtSKTNvUvk3XxZoiBoyv5h3Wu0wENoEHS3HaHnI0hloTZB9rccW%2Bq7eyVj8dSKcOw51rti%2FBBNfmN%2BpLBTtXn4nwyQDmh%2BnTBVKy%2BY8ifai8iedwhX5I0l7mLfFRZvXf1C8F%2BsxJf4fT2%2Ft7czkJKiOwXBsPg%3D%3D&trade_no=2019092122001473661000497724&auth_app_id=2016101200668044&version=1.0&app_id=2016101200668044&sign_type=RSA2&seller_id=2088102179220884&timestamp=2019-09-21+14%3A20%3A07

来进行验证,是否支付成功。下面是实现该功能的核心代码:

urls.py :(将路由添加到utls.py文件中)

path('show_msg/', views.show_msg),

views.py :

def show_msg(request):
  if request.method == 'GET':
    alipay = AliPay(
      appid="2016101200668044", # APPID
      app_notify_url='http://127.0.0.1:8000/check_order/',
      return_url='http://127.0.0.1:8000/show_msg/',
      app_private_key_path='keys/app_private_2048.txt', # 应用私钥
      alipay_public_key_path='keys/alipay_public_2048.txt', # 支付宝公钥
      debug=True, # 默认是False
    )
    params = request.GET.dict() # 获取请求携带的参数并转换成字典类型
    print(
      request.GET) # <QueryDict: {'charset': ['utf-8'], 'out_trade_no': ['04f09b6f-e792-4a1d-8dbc-c68f1d046622'], ……}
    print(params) # {'charset': 'utf-8', 'out_trade_no': '04f09b6f-e792-4a1d-8dbc-c68f1d046622',……}
    sign = params.pop('sign', None) # 获取sign的值
    # 对sign参数进行验证
    status = alipay.verify(params, sign)
    if status:
      return render(request, 'show_msg.html', {'msg': '支付成功'})
    else:
      return render(request, 'show_msg.html', {'msg': '支付失败'})
  else:
    return render(request, 'show_msg.html', {'msg': '只支持GET请求,不支持其它请求'})

show_msg.html :

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>支付结果</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
     integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
  <div class="row" style="margin-top: 30px">
    <div class="col-md-4 col-md-offset-4">
      <div class="panel panel-primary">
        <div class="panel-body text-center">{{ msg }}!</div>
      </div>
    </div>
  </div>
</div>
</body>
</html>

支付成功的截图:

① 编写视图函数check_order来接收支付宝的发送过来的POST请求,根据POST过来的请求体内容,判断是否支付成功,如果支付成功,把订单支付状态改为 已支付

注意:在本地测试app_notify_url参数必须通过公网接收请求,支付宝只能向外网发送POST请求,所以必须把项目运行在具有公网ip的服务器上,第三部分【三. 支付项目部署】会论述到。这里把视图函数逻辑完成。

因为需要支持POST请求,所以需要修改配置文件:

settings.py

…
MIDDLEWARE = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  # 'django.middleware.csrf.CsrfViewMiddleware', # 注释掉这一行,就不会报CSRF cookie not set.)的错误
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
…

views.py :(需要将所有的 app_notify_url 的值修改为公网地址)

def check_order(request):
  '''
  支付宝通知支付的结果信息,如果支付成功可以用来修改订单的状态
  :param request:
  :return:
  '''
  if request.method == 'POST':
    alipay = AliPay(
      appid="2016101200668044", # APPID
      app_notify_url='http://106.12.115.136:8000/check_order/', # 支付宝会向这个地址发送post请求
      return_url='http://127.0.0.1:8000/show_msg/', # 支付宝会向这个地址发送get请求
      app_private_key_path='keys/app_private_2048.txt', # 应用私钥
      alipay_public_key_path='keys/alipay_public_2048.txt', # 支付宝公钥
      debug=True,
    )
    # print('request.body:', request.body) # 是字节类型,b'gmt_create=2019-09-21+17%3A00%3A15&charset=utf-8&……
    body_str = request.body.decode('utf-8') # 转成字符串
    # print('body_str:', body_str)
    from urllib.parse import parse_qs
    post_data = parse_qs(body_str) # 根据&符号分割
    print(post_data) # post_data是一个字符串
    post_dict = {}
    for k, v in post_data.items():
      post_dict[k] = v[0]
    sign = post_dict.pop('sign', None)
    status = alipay.verify(post_dict, sign)
    if status: # 支付成功
      out_trade_no = post_data['out_trade_no']
      models.Order.objects.filter(order_number=out_trade_no).update(order_status=1)
      return HttpResponse('success') # 向支付宝返回success,表示接收到请求
    else:
      return HttpResponse('支付失败')
  else:
    return HttpResponse('只支持POST请求')

5. 订单视图的生成

order_list.html :

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
     content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>订单信息</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css"
     integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
<div class="container">
  <div class="row" style="margin-top: 10px">
    <h4 style="text-align: center;font-weight: bold">Django支付宝支付案例</h4>
  </div>
  <div class="row" style="margin-top: 10px">
    <div class="col-md-8 col-md-offset-2">
      <table class="table table-bordered">
        <tr style="text-align: center">
          <th style="text-align: center">订单ID</th>
          <th style="text-align: center">订单号</th>
          <th style="text-align: center">订单状态</th>
          <th style="text-align: center">商品名称</th>
          <th style="text-align: center">商品价格</th>
        </tr>
        {% for row in order_obj %}
          <tr style="text-align: center">
            <td>{{ row.id }}</td>
            <td>{{ row.order_number }}</td>
            <td>{{ row.get_order_status_display }}</td>
            <td>{{ row.goods.goods_name }}</td>
            <td>{{ row.goods.goods_price }}</td>
          </tr>
        {% endfor %}
      </table>
    </div>
  </div>
</div>
<div class="container-fluid" style="color: #b2bcc5;margin-top: 20px;margin-bottom: 2px">
  <div class="row">
    <div class="col-md-12 text-center" style="padding: 40px">
      Copyright © 2019-2020 蓝色旗帜 版权所有 
      <a target="_blank_" href="http://www.miit.gov.cn/" style="color:#b2bcc5;">豫ICP备19014367号-1</a>
    </div>
  </div>
</div>
</body>
</html>

views.py :(订单列表部分逻辑代码)

def order_list(request):
  order_obj = models.Order.objects.all()
  return render(request, 'order_list.html', {'order_obj': order_obj})

截图:

三. 支付项目的部署

1. 项目部署环境

  • 系统:CentOS 7
  • Python版本:python 3.7.3
  • Django版本:Django 2.2.5

2. 安装python3

① 解决依赖关系

[root@instance-mtfsf05r ~]# yum update

[root@VM_39_157_centos ~]# yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y

② 下载python3的源代码

[root@VM_39_157_centos ~]# wget https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz ,或

[root@instance-mtfsf05r ~]# wget https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tar.xz

③ 解压缩源代码

[root@instance-mtfsf05r ~]# tar zxvf Python-3.7.3.tgz -C ./ 或

[root@instance-mtfsf05r ~]# xz -d Python-3.4.7.tar.xz

[root@instance-mtfsf05r ~]# tar -xf Python-3.4.7.tar

④ 切换进入python源代码目录

[root@instance-mtfsf05r ~]# cd Python-3.7.3/

⑤ 释放编译文件

[root@instance-mtfsf05r Python-3.7.3]# ./configure --prefix=/usr/local/python373

执行完这条语句后还不会生成/usr/local/python373这个文件夹。./configure是用来检测安装平题啊的目标特征。比如,它会检测你是不是有CC或GCC,它是一个sheel脚本。configure脚本执行后,会生成一个Makefile文件。

./configure:是当前文件夹下面的configure文件(绿色的文件表示可执行文件)

./configure --prefix=/usr/local:释放脚本文件,指明安装路径。

执行后会检查依赖问题,如果依赖没解决好,就会有各种报错。

⑥ 编译与安装

[root@instance-mtfsf05r Python-3.7.3]# make

[root@instance-mtfsf05r Python-3.7.3]# make install

这两步完成后才会创建/usr/local/python373这个文件夹。make是用来编译的,它从Makefile中读取指令,然后编译。make install是用来安装的,它也会从Makefile中读取指令,安装到指定的位置。

这两句也可以一句执行:make && make install,表示make执行成功之后,才会执行make install命令。make命令执行的时候,就会调Makefile开始编译。

⑦ 配置软链接,快捷启动python3和pip3(如果选择配置软链接, 请忽略⑧⑨ )

[root@instance-mtfsf05r bin]# ln -s /usr/local/python373/bin/python3 /usr/bin/python3

[root@instance-mtfsf05r bin]# ln -s /usr/local/python373/bin/pip3 /usr/bin/pip3

[root@instance-mtfsf05r ~]# pip3 install --upgrade pip

pip3 install --upgrade pip的意思是:通过pip3 install 这个命令去升级pip

如果想要直接执行python就使用python3可以执行下面的操作:

[root@instance-mtfsf05r ~]# cd /usr/bin

[root@instance-mtfsf05r bin]# mv python python.backup

[root@instance-mtfsf05r bin]# ln -s /usr/local/bin/python3.7 /usr/bin/python

⑧ 配置系统环境变量,加入python3的目录(与⑦ 任选其一种方式)

第一种方式: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/python3/bin/

第二种方式: PATH=$PATH:/usr/local/python3/bin/

配置环境变量需要谨慎,如果配错了,其它命令也会丢失。

⑨ 写入个人配置文件,永久生效

编辑配置文件: [root@instance-mtfsf05r bin]# vim /etc/profile

将PATH写入到配置文件中: PATH=$PATH:/usr/local/python3/bin/ (可以放到最后一行)

读取配置文件,生效配置: [root@instance-mtfsf05r bin]# source /etc/profile

2. 安装django

[root@instance-mtfsf05r ~]# pip3 install django

注意:项目依赖的第三方库也都要安装到系统中。

3. 启动支付宝项目

启动项目之前需要修改django配置文件(settings.py)修改为所有主机都可以访问,这是为了防止项目不能被访问:

ALLOW_HOST = ['*']
[root@instance-mtfsf05r ~]# cd alipay_django/

[root@instance-mtfsf05r alipay_django]# python3 manage.py runserver 0.0.0.0:5000

网页访问不到的解决方案:1. iptables -F:清空规则;2. setenforce 0:把两个防火墙都关闭。

可能用到的linux命令:

查找被占用的端口: netstat -tln | grep 8000

查看被占用端口的PID: lsof -i:8000

kill掉该进程: kill -s -9 32290

四. 支付案例的总结

1. 案例的下载

github: https://github.com/ThanlonSmith/alipay_django

2. 服务器宕机问题(面试)

用户支付完成后,支付宝刚刚返回支付完成的信息时,但服务器却宕机了。要知道这个时候,我们系统的订单支付状态还没更新呢,该如何解决?其实不用过多担心的,实际上如果支付宝没有收到返回结果,会不时间隔一段时间在24小时之内不停地向我们的服务器发送请求。如果服务器在24小时之内运行起来了,还是可以更新我们的订单支付状态的。但是,如果超过24小时,就只能自己修改站内的订单状态信息了。还有,可以在程序代码中看到有这样一行代码 return HttpResponse('success') ,这其实再告诉支付宝,我们网站已经收到信息,不用再发请求了,这是支付宝的一种检测机制。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-09-22

Django实现支付宝付款和微信支付的示例代码

支付宝支付和微信支付是当今互联网产品常用的功能,我使用Django Rest Framework实现了网页上支付宝支付和微信支付的一个通用服务,提供rpc接口给其他服务,包括获取支付宝支付页面url的rpc接口.支付宝支付成功异步回调http接口.获取微信支付二维码rpc接口.主动查询微信订单是否支付的rpc接口等. 支付宝网站支付需要蚂蚁金服开放平台账号,创建应用.配置秘钥等步骤请参考:蚂蚁金服支付宝电脑网站支付快速接入 微信网站支付需要到微信支付官网注册服务商账号, 目录结构如下: 1.mo

python采用django框架实现支付宝即时到帐接口

因工作需要研究了支付宝即时到帐接口,并成功应用到网站上,把过程拿出来分享. 即时到帐只是支付宝众多商家服务中的一个,表示客户付款,客户用支付宝付款,支付宝收到款项后,马上通知你,并且此笔款项与交易脱离关系,商家可以马上使用. 即时到帐只对企业客户服务,注册成功企业账号以后,申请签约即时到帐产品,大约3-5个工作日后,签约成功,可以马上进入集成产品阶段. 这个是支付宝提供的接口,有asp,c#,java,php四种语言的,每种语言提供GBK和UTF-8两种方案.另带一份支付宝的文档,这份文档我感觉

django中使用事务及接入支付宝支付功能

之前一直想记录一下在项目中使用到的事务以及支付宝支付功能,自己一直犯懒没有完,趁今天有点兴致,在这记录一下. 商城项目必备的就是支付订单的功能,所以就会涉及到订单的保存以及支付接口的引入.先来看看订单的保存,在数据库模型涉及之初,将订单分成了两个表,一个为订单表,记录订单的基本信息,如订单号,用户信息,运费之类,一个为订单商品表,记录该订单中的商品信息.在保存订单时,肯定会涉及到两个表的新建和保存,其实还有一张表也需要进行一些修改,那就是商品表,当一个订单保存成功,意味着本次交易成功,商品售出,

ThinkPHP框架下整合支付宝支付功能图文教程

本文实例讲述了ThinkPHP框架下整合支付宝支付功能.分享给大家供大家参考,具体如下: 背景 近期项目需要接入支付宝支付功能,其中开发使用了ThinkPHP3.2.3框架,通过参考开发平台文档可以知道,网站开发有两种场景,一种是手机网站支付,直接唤醒支付宝app进入支付操作:另一种多是 PC 端显示支付二维码的形式,然后使用手机的支付宝app扫描. 此处主要介绍手机网站支付的实现,后期补充扫码支付. 一.接入配置 1).接入步骤 根据"快速接入"中的流程,两者大同小异,都是进行: 第

PHP 实现手机端APP支付宝支付功能

最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在蚂蚁金服开放平台创建应用,签约商户,生成应用公钥和私钥: 2.配置统一下单支付参数: 3.整合支付宝demo类文件: 4.创建Alipay支付类,类内创建两个方法(alipay_app:统一下单方法和alipay_notify:支付成功异步回调方法); 第一步主要是在蚂蚁金服开放平台登录你的支付

SpringMVC+Spring+Mybatis实现支付宝支付功能的示例代码

本博客详细介绍了如何使用ssm框架实现支付宝支付功能.本文章分为两大部分,分别是「支付宝测试环境代码测试」和「将支付宝支付整合到ssm框架」,详细的代码和图文解释,自己实践的时候一定仔细阅读相关文档. 教程源代码:https://github.com/OUYANGSIHAI/sihai-maven-ssm-alipay 一.支付宝测试环境代码测试: 1.下载电脑网站的官方demo以及查看参考相关文档: 地址:https://docs.open.alipay.com/270/106291/ 2.下

Vue的H5页面唤起支付宝支付功能

目前项目中比较常用的第三方支付无非就是支付宝支付和微信支付.下面介绍一下Vue中H5页面如何使用支付宝支付.其实很简单的,只不过是调自己后台的一个接口而已(后台根据支付宝文档,写好支付接口). 触发支付宝支付调用后台接口,后台会返回支付宝提供的form表单,我们只要在vue里面创建新节点,将返回的form表单append进去,并提交就可以唤起支付宝支付.另在此说一下这个 returnUrl , 它是支付后支付宝回调的页面.具体可以根据自身业务,后台写死或者由前端控制. methods () {

Vue仿支付宝支付功能

先给大家上个效果图: <div class="goods-psd"> <p class="apply-title"> 请输入支付密码 </p> <p style="margin: 0.2rem">确认支付 <span>{{password}}</span> </p> <div class="psd-container"> <i

PHP实现的支付宝支付功能示例

本文实例讲述了PHP实现的支付宝支付功能.分享给大家供大家参考,具体如下: 在给app做支付宝支付接口的时候收集内容整理如下: 接口: import('alipay.AopClient', EXTEND_PATH); import('alipay.request.AlipayTradeAppPayRequest', EXTEND_PATH); $aop = new \AopClient(); $aop->gatewayUrl = "https://openapi.alipay.com/ga

Java spring boot 实现支付宝支付功能的示例代码

一.准备工作: 1.登陆支付宝开发者中心,申请一个开发者账号. 地址:https://openhome.alipay.com/ 2.进入研发服务: 3.点击链接进入工具下载页面: 4.点击下载对应版本的RSA公钥生成器: 5.生成公钥密钥(记录你的应用私钥): 6.在支付宝配置公钥(点击保存): 二.搭建demo 1.引入jia包: <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alip

Android集成支付宝支付功能示例

公司项目中需要支付功能,现在支付宝.微信支付很方便,也很多人使用,因此,他们是首选.在此记录一下支付宝集成过程,下期为微信支付,敬请期待 首先去支付宝官网下载其最新的Android的SDK集成Dmeo 支付宝 选择SDK&Dmeo进行下载 将支付宝jar包添加项目中 alipaySdk-20160516.jar 可以看到其主要的调用方法在PayDemoActivity类中,下面为主要支付调用方法: /** * 完整的符合支付宝参数规范的订单信息 */ final String payInfo =

如何在Android App中集成支付宝和微信支付功能

前言 本文主要介绍如何在 Android App 里集成支付宝和微信支付的功能,文中将实现的步骤一步步介绍的非常详细,对同样遇到这个问题的朋友相信会是一个很好的参考,下面话不多说了,来一起看看详细的介绍吧. 集成支付宝支付 没想到现在 App 里集成支付宝是这么的简单,我还折腾了好久- 好了,开始,假设你已经完成了支付宝那些繁杂的申请啥的工作,进入开发了. 首先,去下载官方的 DEMO : App支付客户端DEMO&SDK. 导入开发资源 解压后把里面的 jar 包拿出来放到你工程的 lib 目