am928 发表于 2025-4-19 04:38:29

支付宝功能-支付宝功能服务有哪些-支付宝功能关闭怎么解除

<p[][]]</p>   
如果这篇文章对你有帮助,那就给个免费的一键三连并且关注吧,非常感谢。你的支持会成为我持续更新的动力,每周我会定期分享很实用且高质量的技术干货,期待能和你一起成长!为了可以随时随地阅读我的最新技术文章,你可以微信搜索并关注公众号:程序员皮蛋鸽鸽。

一、前言

支付宝官方对 Java 等语言的文档说明支持情况较好,而在某些方面相对较弱,同时还存在依赖包安装不了等 Bug。因此,接下来我将分享《在 Web 开发中如何集成支付宝沙箱支付》的详细教程。如果这篇文章对你有帮助,请记得关注我的公众号,我会定期分享实用的技术教程。如果没能帮到你,你可以留个免费的关注。以后可能会有你感兴趣的教程,并且这些教程的文章质量都超高。

在个人日常的项目中,或者在准备后续对接支付宝正式支付环境的项目里,使用沙箱支付来测试支付功能是很有必要的。如果是在校大学生,在自己的项目中集成支付宝的沙箱支付,能够让项目的档次得到极大提升,也能狠狠地展现一番。哈哈

接下来我带你配置最简单的沙箱支付环境,这里只是举例引导在 Web 开发中如何集成沙箱支付,你可以与其他框架配合集成,比如……等。希望你能依据这个最简配置举一反三,搞懂沙箱支付的原理和流程,遇到其他框架时能灵活配置以应对沙箱支付业务功能。

二、前置条件

进入沙箱支付应用配置的界面后,点击开发工具推荐,接着点击沙箱,从而进入沙箱应用界面。

进入后的界面呈现如下情况,存在两个重要的部分,分别是 APPID 以及密钥,随后需将其配置到我们的项目里。

如果已经对原理较为熟悉,那么直接启用系统默认秘钥也是可以的。对于那些还不熟悉的朋友,接下来就带大家通过密钥工具一步步生成密钥,这样能让大家理解密钥的使用。想要下载密钥生成工具的话,可以访问密钥工具下载。只需选择对应系统的应用进行下载就可以了。

下载完成后,打开密钥生成工具,点击生成秘钥。

密钥生成之后,会在密钥工具的界面中显示出来。同时,也会把密钥信息保存到文件里。界面中显示的密钥内容与文件中的内容是相同的。

此时我们能够复制应用公钥内容,用以配置网页中沙箱应用界面的自定义密钥。把应用公钥复制到填写应用公钥的那个输入框里,接着点击保存,就会自动生成支付宝公钥,而这就是我们在项目中需要用到的公钥配置信息。

我来展示一下支付宝公钥生成结果界面的样子哈。需注意,沙箱支付使用的是支付宝公钥配置信息,而非应用公钥。

准备密钥

之后我们会在项目中进行配置,以读取这两个文件的内容。你需要按照以下格式来配置你的密钥信息哦。格式要求为:前后两头都有特定内容,中间为对应的密钥信息,且要顶格书写,不要空格,直接将密钥信息复制粘贴在中间。

<p><pre>    <code class="prism language-txt">-----BEGIN PUBLIC KEY-----
你的支付宝公钥内容
-----END PUBLIC KEY-----
</code></pre></p>
<p><pre>    <code class="prism language-txt">该部分内容具有特定的格式和意义。
你的应用私钥内容
-----END RSA PRIVATE KEY-----
</code></pre></p>
设置配置信息

创建一个用于存放配置信息的.py 文件,接着把下面的配置模板复制到这个.py 文件里。之后在网页的沙箱应用页面,把你的 APPID 的账号复制过来,填写到下面的字段中。

<p><pre>    <code class="prism language-python"><span class="token comment"># config.py</span>
<span class="token comment"># 支付宝支付相关配置</span>
<span class="token keyword">import</span> os
BASE_DIR <span class="token operator">=</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>dirname<span class="token punctuation">(</span>__file__<span class="token punctuation">)</span>
ALIPAY_SETTING <span class="token operator">=</span> <span class="token punctuation">{</span>
    <span class="token string">&#39;ALIPAY_APP_ID&#39;</span><span class="token punctuation">:</span> <span class="token string">"9021000133847947"</span><span class="token punctuation">,</span><span class="token comment"># APPID(上线之后需要改成,真实应用的appid)</span>
    <span class="token string">APLIPAY_APP_NOTIFY_URL 这个内容。 它是特定的一个标识或指向某个应用程序通知的 URL 地址。 用于特定的支付相关的通知机制或流程中。 该 URL 在相关的支付系统或应用场景中具有特定的作用和意义。 它与 APLIPAY 的支付业务相关联,用于传递支付相关的信息和通知。</span><span class="token punctuation">:</span> <span class="token boolean">None</span><span class="token punctuation">,</span><span class="token comment">应用回调地址,在支付成功以后,支付宝会将结果返回至某一个地址。一般情况下,这里不填写具体地址,使用下面的回调地址即可。</span>
    <span class="token string">&#39;ALIPAY_DEBUG&#39;</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span>
    <span class="token comment">APIPAY_GATEWAY 是“https://openapi.alipay.com/gateway.do”,这是上线后的真实网关。</span>
    <span class="token string">&#39;APIPAY_GATEWAY&#39;</span><span class="token punctuation">:</span> <span class="token string">该链接为 "https://openapi.alipaydev.com/gateway.do"</span><span class="token punctuation">,</span><span class="token comment"># 沙盒环境的网关(上线需要进行修改)</span>
    <span class="token string">&#39;ALIPAY_RETURN_URL&#39;</span><span class="token punctuation">:</span> <span class="token string">"127.0.0.1:5000/alipay/result/" 的访问地址为该链接所指向的路径。此路径用于支付宝相关操作的结果展示,通过该链接可获取支付宝操作后的相关信息及结果呈现。它在特定的系统或应用环境中起到关键作用,与支付宝的业务流程紧密相关,是整个支付流程中重要的一环。</span><span class="token punctuation">,</span><span class="token comment"># 同步回调地址,用于前端,支付成功之后回调</span>
    <span class="token string">&#39;ALIPAY_NOTIFY_URL&#39;</span><span class="token punctuation">:</span> <span class="token string">"http://127.0.0.1:5000/alipay/result/"</span><span class="token punctuation">,</span><span class="token comment">异步回调网址是后端使用的。进行的是 post 请求。目前网站尚未上线。在这种情况下,post 请求无法接收到响应内容。只有在付款成功之后才会进行回调。</span>
    <span class="token string">“APP_PRIVATE_KEY_STRING”这一内容。</span><span class="token punctuation">:</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>BASE_DIR<span class="token punctuation">,</span> <span class="token string">&#39;keys/private.key&#39;</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment">自己生成的私钥,这是一个路径拼接的操作。将其配置好之后,尝试一下能否点进去。</span>
    <span class="token comment">支付宝的公钥是用于验证支付宝回传消息的,而不是你自己的公钥。</span>
    <span class="token string">ALIPAY 的公钥字符串。</span><span class="token punctuation">:</span> os<span class="token punctuation">.</span>path<span class="token punctuation">.</span>join<span class="token punctuation">(</span>BASE_DIR<span class="token punctuation">,</span> <span class="token string">&#39;keys/public.key&#39;</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment"># 一定要注意,是支付宝给你的公钥,不是你自己生成的那个</span>
    <span class="token string">&#39;SIGN_TYPE&#39;</span><span class="token punctuation">:</span> <span class="token string">"RSA2"</span><span class="token punctuation">,</span><span class="token comment"># RSA 或者 RSA2现在基本上都是用RSA2</span>
<span class="token punctuation">}</span>
</code></pre></p>
支付成功后,支付宝的支付成功界面在网页跳转的地址以及支付成功后支付宝向后端服务地址发来的请求,分别是同步回调地址和异步回调地址。你可以这样理解,当支付成功时,支付宝的支付页面会在网页上自动跳转到你所指定的网页地址,这个指定的网页地址就是同步回调地址。异步回调地址,就是在支付成功之后,支付宝的服务端会朝着你所指定的你项目的服务端地址发起 POST 请求。这样做的目的是触发你的后续业务逻辑处理。在这个请求的 url 查询字符串参数里,会携带着订单处理的相关信息,例如订单号、签名、金额等。

为什么要推荐再做一个异步回调验证操作呢?因为前端回调地址 url 中的查询参数是可以被修改的,这就导致了其存在不安全的因素。所以,最好在服务端再构建一个处理逻辑,用于接收支付成功后支付宝向异步回调地址发来的 POST 请求。支付宝会按照一定的间隔向这个异步回调地址发送 8 次请求,一直到接收到响应并返回了字符串为止。异步回调地址仅在项目上线之后方可使用。这意味着支付宝需要向你的公网 IP 发送请求,然而,你本地的普通开发环境网络是无法与之连接的。

创建一个用于构造支付对象的工具函数,将其存放在与.py处于同一层级的 utils.py 文件里。

<p><pre>    <code class="prism language-python"><span class="token comment"># utils.py</span>
<span class="token keyword">from</span> <span class="token punctuation">.</span> <span class="token keyword">import</span> config
<span class="token keyword">from</span> alipay <span class="token keyword">import</span> AliPay<span class="token punctuation">,</span> DCAliPay<span class="token punctuation">,</span> ISVAliPay
<span class="token keyword">from</span> alipay<span class="token punctuation">.</span>utils <span class="token keyword">import</span> AliPayConfig
<span class="token keyword">import</span> uuid
<span class="token keyword">from</span> datetime <span class="token keyword">import</span> datetime
<span class="token comment"># 生成支付alipay对象,以供调用</span>
<span class="token keyword">def</span> <span class="token function">create_alipay</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    alipay <span class="token operator">=</span> AliPay<span class="token punctuation">(</span>
      appid<span class="token operator">=</span>config<span class="token punctuation">.</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;ALIPAY_APP_ID&#39;</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
      app_notify_url<span class="token operator">=</span><span class="token boolean">None</span><span class="token punctuation">,</span><span class="token comment"># 默认回调 url</span>
      app_private_key_string<span class="token operator">=</span><span class="token builtin">open</span><span class="token punctuation">(</span>config<span class="token punctuation">.</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;APP_PRIVATE_KEY_STRING&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>read<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
      <span class="token comment">支付宝的公钥是用于验证支付宝回传消息的,它不是你自己的公钥。</span>
      alipay_public_key_string<span class="token operator">=</span><span class="token builtin">open</span><span class="token punctuation">(</span>config<span class="token punctuation">.</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;ALIPAY_PUBLIC_KEY_STRING&#39;</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">.</span>read<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>
      sign_type<span class="token operator">=</span>config<span class="token punctuation">.</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;SIGN_TYPE&#39;</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment"># RSA 或者 RSA2</span>
      debug<span class="token operator">=</span>config<span class="token punctuation">.</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;ALIPAY_DEBUG&#39;</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment"># 默认 False</span>
      verbose<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">,</span><span class="token comment"># 输出调试数据</span>
      <span class="token comment">config 为 AliPayConfig,其中包含超时时间,超时时间为 50,此超时时间为可选的请求超时时间</span>
    <span class="token punctuation">)</span>
    <span class="token keyword">return</span> alipay
<span class="token comment"># 生成唯一订单号</span>
<span class="token keyword">def</span> <span class="token function">generate_order_number</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token comment"># 获取当前时间并转换为指定格式的字符串</span>
    current_time <span class="token operator">=</span> datetime<span class="token punctuation">.</span>now<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span>strftime<span class="token punctuation">(</span><span class="token string">"%Y%m%d%H%M%S"</span><span class="token punctuation">)</span>
https://img1.baidu.com/it/u=4046973898,2796241639&fm=253&fmt=JPEG&app=138&f=JPEG?w=500&h=668

    <span class="token comment"># 生成 UUID 并转换为字符串</span>
    unique_id <span class="token operator">=</span> <span class="token builtin">str</span><span class="token punctuation">(</span>uuid<span class="token punctuation">.</span>uuid4<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token builtin">hex</span><span class="token punctuation">)</span>
    <span class="token comment"># 拼接时间字符串和 UUID 生成订单号</span>
    order_number <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>current_time<span class="token punctuation">}</span></span><span class="token interpolation"><span class="token punctuation">{</span>unique_id<span class="token punctuation">}</span></span><span class="token string">"</span></span>
    <span class="token keyword">return</span> order_number
</code></pre></p>
安装依赖

<p><pre>    <code class="prism language-bash">$ pip3 <span class="token function">install</span>使用 python-alipay-sdk 进行升级操作,升级源设置为 https://pypi.douban.com/simple/ 。
</code></pre></p>
项目结构

<p><pre>    <code class="prism language-bash"><span class="token builtin class-name">.</span>
│app.py
│config.py
│utils.py
│__init__.py
├─keys
│├─private.key
│├─public.key
└─templates
   ├─order.html
   ├─result.html
</code></pre></p>
三、Flask 集成沙箱支付 视图和业务逻辑

为演示方便,我把业务处理的代码都放置在一个文件里了,且注释十分详细,期望你能够理解。

<p><pre>    <code class="prism language-python"><span class="token keyword">from</span> datetime <span class="token keyword">import</span> datetime
<span class="token keyword">from</span> flask <span class="token keyword">import</span> Flask<span class="token punctuation">,</span> render_template<span class="token punctuation">,</span> request
<span class="token keyword">from</span> <span class="token punctuation">.</span>config <span class="token keyword">import</span> ALIPAY_SETTING
<span class="token keyword">from</span> <span class="token punctuation">.</span>utils <span class="token keyword">import</span> create_alipay<span class="token punctuation">,</span> generate_order_number
app <span class="token operator">=</span> Flask<span class="token punctuation">(</span>__name__<span class="token punctuation">)</span>
<span class="token decorator annotation punctuation">@app<span class="token punctuation">.</span>route</span><span class="token punctuation">(</span><span class="token string">&#39;/order/&#39;</span><span class="token punctuation">,</span> methods<span class="token operator">=</span><span class="token punctuation">[</span><span class="token string">&#39;GET&#39;</span><span class="token punctuation">,</span> <span class="token string">&#39;POST&#39;</span><span class="token punctuation">]</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">create_order</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token comment"># 如果是 GET 请求,返回商品展示页面</span>
    <span class="token keyword">if</span> request<span class="token punctuation">.</span>method <span class="token operator">==</span> <span class="token string">&#39;GET&#39;</span><span class="token punctuation">:</span>
      <span class="token keyword">return</span> render_template<span class="token punctuation">(</span><span class="token string">&#39;order.html&#39;</span><span class="token punctuation">)</span>
    <span class="token comment">如果是 POST 请求,就会生成支付路由。然后让前端页面打开所生成的支付链接 url。</span>
    <span class="token comment">电脑网站进行支付时,需要跳转至:https://openapi.alipay.com/gateway.do 加上 order_string 。</span>
    alipay <span class="token operator">=</span> create_alipay<span class="token punctuation">(</span><span class="token punctuation">)</span>
    order_string <span class="token operator">=</span> alipay<span class="token punctuation">.</span>api_alipay_trade_page_pay<span class="token punctuation">(</span>
      <span class="token comment">以下这些数据,原本都应当是你数据库中的数据。然而,我在此进行测试,就只是简单地直接进行了书写。</span>
      out_trade_no<span class="token operator">=</span>generate_order_number<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span>   <span class="token comment"># 商品订单号唯一的</span>
      total_amount<span class="token operator">=</span><span class="token number">135</span><span class="token punctuation">,</span>                     <span class="token comment"># 商品价格</span>
      subject<span class="token operator">=</span><span class="token string">&#39;开通季度会员&#39;</span><span class="token punctuation">,</span>                  <span class="token comment"># 商品的名称</span>
      return_url<span class="token operator">=</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;ALIPAY_RETURN_URL&#39;</span><span class="token punctuation">)</span><span class="token punctuation">,</span><span class="token comment"># 同步回调网址--用于前端,付成功之后回调</span>
      notify_url<span class="token operator">=</span>ALIPAY_SETTING<span class="token punctuation">.</span>get<span class="token punctuation">(</span><span class="token string">&#39;ALIPAY_NOTIFY_URL&#39;</span><span class="token punctuation">)</span>   <span class="token comment">后端使用异步回调网址,进行 post 请求。但目前网站尚未上线,所以 post 请求无法接收到响应内容。</span>
    <span class="token punctuation">)</span>
    <span class="token comment">我来讲一下为什么要有同步和异步。因为同步是前端跳转的地址。</span>
    <span class="token comment"># 如果前端出现页面崩了,那么校验有后端完成</span>
    <span class="token comment">在实际开发过程中,后端必须要进行校验。因为前端的校验是有可能被修改的。</span>
    url <span class="token operator">=</span> <span class="token string-interpolation"><span class="token string">f 的链接为 https://openapi-sandbox.dl.alipaydev.com/gateway.do?</span><span class="token interpolation"><span class="token punctuation">{</span>order_string<span class="token punctuation">}</span></span><span class="token string">&#39;</span></span>
    <span class="token keyword">return</span> <span class="token punctuation">{</span><span class="token string">&#39;url&#39;</span><span class="token punctuation">:</span> url<span class="token punctuation">,</span> <span class="token string">&#39;status&#39;</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">}</span>
<span class="token decorator annotation punctuation">@app<span class="token punctuation">.</span>route</span><span class="token punctuation">(</span><span class="token string">&#39;/alipay/result/&#39;</span><span class="token punctuation">)</span>
<span class="token keyword">def</span> <span class="token function">payment</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
    <span class="token comment">进行校验,因为后端在支付成功之后并不知道是否真正成功,所以需要对其进行校验。</span>
    alipay <span class="token operator">=</span> create_alipay<span class="token punctuation">(</span><span class="token punctuation">)</span>
    data <span class="token operator">=</span> request<span class="token punctuation">.</span>args<span class="token punctuation">.</span>to_dict<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token comment"># 把get请求的参数转换成字典</span>
    signature <span class="token operator">=</span> data<span class="token punctuation">.</span>pop<span class="token punctuation">(</span><span class="token string">"sign"</span><span class="token punctuation">)</span><span class="token comment"># 把sign pop出去</span>
    <span class="token comment"># 验证数据和签名是否有效</span>
    success <span class="token operator">=</span> alipay<span class="token punctuation">.</span>verify<span class="token punctuation">(</span>data<span class="token punctuation">,</span> signature<span class="token punctuation">)</span><span class="token comment"># success是布尔值</span>
    <span class="token keyword">if</span> request<span class="token punctuation">.</span>method <span class="token operator">==</span> <span class="token string">"GET"</span><span class="token punctuation">:</span>
      <span class="token keyword">if</span> success<span class="token punctuation">:</span>
            <span class="token comment"># 如果成功支付了,这个success是True</span>
            <span class="token comment"># 接着写逻辑了,比如修改当前订单的状态</span>
            <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">&#39;支付成功,后台已经校验过了,金币+1&#39;</span><span class="token punctuation">,</span> success<span class="token punctuation">,</span> data<span class="token punctuation">)</span>
            <span class="token keyword">return</span> render_template<span class="token punctuation">(</span><span class="token string">&#39;result.html&#39;</span><span class="token punctuation">,</span> success<span class="token operator">=</span>success<span class="token punctuation">,</span> data<span class="token operator">=</span>data<span class="token punctuation">)</span>
      <span class="token keyword">return</span> <span class="token string">&#39;支付失败提示!&#39;</span>
    <span class="token keyword">if</span> success <span class="token keyword">and</span> data<span class="token punctuation">[</span><span class="token string">"trade_status"</span><span class="token punctuation">]</span> <span class="token keyword">in</span> <span class="token punctuation">(</span><span class="token string">"TRADE_SUCCESS"</span><span class="token punctuation">,</span> <span class="token string">"TRADE_FINISHED"</span><span class="token punctuation">)</span><span class="token punctuation">:</span>
      <span class="token comment">支付宝会向你所指定的后端服务地址发送 POST 请求来进行异步回调校验,并且最后必须要返回一个 success 。</span>
      <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">&#39;支付成功,后台已经校验过了,金币+1&#39;</span><span class="token punctuation">)</span>
      <span class="token keyword">return</span> <span class="token string">&#39;success&#39;</span>    <span class="token comment"># 返回一个success</span>
    <span class="token keyword">return</span> <span class="token string">&#39;支付失败啦!&#39;</span>
<span class="token keyword">if</span> __name__ <span class="token operator">==</span> <span class="token string">&#39;__main__&#39;</span><span class="token punctuation">:</span>
    app<span class="token punctuation">.</span>run<span class="token punctuation">(</span>debug<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span>
</code></pre></p>
页面模板

<p><pre>    <code class="prism language-html"><span class="token doctype"><span class="token punctuation"><!</span><span class="token name">doctype</span> <span class="token name">html</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>en<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UTF-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span>
https://img0.baidu.com/it/u=720197171,3739968838&fm=253&fmt=JPEG&app=138&f=JPEG?w=500&h=668

          <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>宽度为设备宽度,用户不可缩放,初始缩放比例为 1.0,最大缩放比例为 1.0,最小缩放比例为 1.0<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">http-equiv</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>X-UA-Compatible<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ie=edge<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>购买商品模拟 - 沙箱支付<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>https://cdn.bootcdn.net 这个路径下的 ajax/libs/jquery/3.4.1 目录里有 jquery.min.js 文件。<span class="token punctuation">"</span></span><span class="token punctuation">></span></span><span class="token script"></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>div</span> <span class="token attr-name">class</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>goods<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>img</span> <span class="token attr-name">src</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>该链接为 https://img0.baidu.com/it/u=2685198448,3471487942&fm=253&fmt=auto?w=1200&h=800 。<span class="token punctuation">"</span></span> <span class="token attr-name">alt</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>商品<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>button</span> <span class="token attr-name">id</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>buy<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
      去购买
    <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>button</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>div</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>script</span><span class="token punctuation">></span></span><span class="token script"><span class="token language-javascript">
    <span class="token function">$</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
      <span class="token function">$</span><span class="token punctuation">(</span><span class="token string">"#buy"</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">click</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
            $<span class="token punctuation">.</span><span class="token function">ajax</span><span class="token punctuation">(</span><span class="token punctuation">{</span>
                url<span class="token operator">:</span> <span class="token string">&#39;/order/&#39;</span><span class="token punctuation">,</span>
                type<span class="token operator">:</span> <span class="token string">&#39;POST&#39;</span><span class="token punctuation">,</span>
                dataType<span class="token operator">:</span> <span class="token string">&#39;JSON&#39;</span><span class="token punctuation">,</span>
                <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                  <span class="token keyword">if</span> <span class="token punctuation">(</span>res<span class="token punctuation">.</span>status <span class="token operator">===</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
                        <span class="token comment">// 跳转到后端支付宝返回的支付链接页面</span>
                        location<span class="token punctuation">.</span>href <span class="token operator">=</span> res<span class="token punctuation">.</span>url
                  <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
                        <span class="token comment">// 前端页面处理失败逻辑</span>
                  <span class="token punctuation">}</span>
                <span class="token punctuation">}</span>
            <span class="token punctuation">}</span><span class="token punctuation">)</span>
      <span class="token punctuation">}</span><span class="token punctuation">)</span>
    <span class="token punctuation">}</span><span class="token punctuation">)</span>
</span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>script</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span>
</code></pre></p>
<p><pre>    <code class="prism language-html"><span class="token doctype"><span class="token punctuation"><!</span><span class="token name">doctype</span> <span class="token name">html</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>html</span> <span class="token attr-name">lang</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>en<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>head</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">charset</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>UTF-8<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">name</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>viewport<span class="token punctuation">"</span></span>
          <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>meta</span> <span class="token attr-name">http-equiv</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>X-UA-Compatible<span class="token punctuation">"</span></span> <span class="token attr-name">content</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>ie=edge<span class="token punctuation">"</span></span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>title</span><span class="token punctuation">></span></span>支付成功页面<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>title</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>head</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>body</span><span class="token punctuation">></span></span>
{% if success %}
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>h1</span><span class="token punctuation">></span></span>支付成功页面展示<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>h1</span><span class="token punctuation">></span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>ul</span><span class="token punctuation">></span></span>
      {% for item in data %}
              <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>li</span><span class="token punctuation">></span></span>{{ item }}: {{ data }}<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>li</span><span class="token punctuation">></span></span>
      {% endfor %}
    <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>ul</span><span class="token punctuation">></span></span>
{% endif %}
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>body</span><span class="token punctuation">></span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>html</span><span class="token punctuation">></span></span>
</code></pre></p>
启动服务后,流程便开始了。首先,我们访问 5000/order/,这样就能进入到商品展示页面。

点击进行购买操作,这时前端会向我们的后端接口发送 POST 请求,进入到路由/order/的 POST 请求业务逻辑处理流程,后端会返回构造好的支付页面链接,前端获取到这个响应结果后,利用.href 来打开该支付页面链接。

扫码支付 or 买家账号密码支付

此时可通过支付宝扫码支付。无需担心,这是沙箱支付,它与你的支付宝账号的真实支付并非同一操作,不必担心扣款。你可以将沙箱支付的余额理解为是供你拿来测试玩的,并且还为你提供了 100 万的余额呢!第二个提示你输入的是支付密码,不是登录密码。

完成上一步后,接着进入收银台,再次输入支付密码来确认支付,这样就能完成付款操作。

付款完成后,界面效果如下。

注意看,支付成功后,其跳转地址为我们配置的同步回调地址。前面曾提到同步回调地址是前端的,现在得到了证实。另外要注意,它的参数可在前端页面中处理,但不能完全轻信,因此需设置异步回调地址来进一步校验。

到此,支付全部完成

注意事项如下:同步回调地址和异步回调地址的配置需与你的路由(或控制器)保持一致,否则无法进行后续的校验处理。关于异步回调:若你的前端页面出现崩溃情况,支付宝会向该路由发送 POST 请求,此过程会间隔发送 8 次,直至返回字符串为止。当前示例中,同步回调地址和异步回调地址我使用了同一个路由。当然,你也有选择使用不同路由的权利,不过必须配置异步回调的路由。

真实应用支付配置 修改支付网关,带dev的是测试网关

<p><pre>    <code class="prism language-python"><span class="token comment"># 电脑网站支付,需要跳转到:https://openapi.alipay.com/gateway.do? + order_string</span>
</code></pre></p>
<p><pre>    <code class="prism language-python">APIPAY_GATEWAY<span class="token operator">=</span><span class="token string">这是一个特定的链接,即“https://openapi.alipay.com/gateway.do”。</span>   <span class="token comment"># 使用真实支付网关,这个是需要和支付宝签约的</span>
</code></pre></p>
修改APPID,修改为真实应用的APPID即可 四、参考:

如果这篇文章对你有帮助,那我真心希望你能够给我的微信公众号点个关注,并且是免费的,非常感谢。
页: [1]
查看完整版本: 支付宝功能-支付宝功能服务有哪些-支付宝功能关闭怎么解除