尚品汇-支付宝介绍、跳转支付订单页面实现(四十六)

news/2024/9/17 3:21:22/ 标签: java, 服务器, 数据库

目录:

(1)支付宝介绍

(1)支付宝介绍

(3)显示付款页面信息

(5)创建支付控制器PaymentController

(1)支付宝介绍

支付宝简介

支付宝(中国)网络技术有限公司 [1]  是国内的第三方支付平台,致力于提供简单、安全、快速的支付解决方案 [2]  。支付宝公司从2004年建立开始,始终以信任作为产品和服务的核心。旗下有支付宝支付宝钱包两个独立品牌。自2014年第二季度开始成为当前全球最大的移动支付厂商。

当用户提交订单会跳转到选择支付渠道页面!

http://payment.gmall.com/pay.html?orderId=43

当用户点击立即支付时生成支付的二维码

 

使用支付宝app 进行扫码支付

过程分析

对接支付宝的准备工作

1、申请条件

1.  企业或个体工商户可申请;

2.  提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致;

3.  网站能正常访问且页面信息有完整商品内容;

4.  网站必须通过ICP备案,个体户备案需与账户主体一致。

(团购类网站不支持个体工商户签约)

支付手续费

申请步骤

  1. 支付宝商家中心中申请 https://www.alipay.com/
  2. https://b.alipay.com/signing/productSetV2.htm?mrchportalwebServer=https%3A%2F%2Fmrchportalweb.alipay.com

 

 

 

 

 

 

 

 

一个工作日后登录到蚂蚁金服开发者中心:

可以查看到一个已经签约上线的应用。 其中非常重要的是这个APPID,需要记录下来之后的程序中要用到这个参数。

点击查看

到此为止,电商网站可以访问支付宝的最基本的准备已经完成。

 

接下来搭建支付模块

(1)支付宝介绍

支付宝开发手册:https://docs.open.alipay.com/270/105900/

搭建service-payment

搭建方式如service-order

修改pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.atguigu.gmall</groupId><artifactId>service</artifactId><version>1.0</version></parent><version>1.0</version><artifactId>service-payment</artifactId><packaging>jar</packaging><name>service-payment</name><description>service-payment</description><dependencies>   
<dependency><groupId>com.atguigu.gmall</groupId><artifactId>service-order-client</artifactId><version>1.0</version></dependency></dependencies><build><finalName>service-payment</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

添加配置

bootstrap.properties

spring.application.name=service-payment
spring.profiles.active=dev
spring.cloud.nacos.discovery.server-addr=192.168.200.129:8848
spring.cloud.nacos.config.server-addr=192.168.200.129:8848
spring.cloud.nacos.config.prefix=${spring.application.name}
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.shared-configs[0].data-id=common.yaml

 

 

启动类

package com.atguigu.gmall.payment;@SpringBootApplication
@ComponentScan({"com.atguigu.gmall"})
@EnableDiscoveryClient
@EnableFeignClients(basePackages= {"com.atguigu.gmall"})
public class ServicePaymentApplication {public static void main(String[] args) {SpringApplication.run(ServicePaymentApplication.class, args);}}

 

导入sdk包

https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java

<!--导入支付宝支付sdk-->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.8.73.ALL</version>
</dependency>

(3)显示付款页面信息

支付页面信息展示流程

 

在根据订单id获取订单信息接口

在service-order添加接口

OrderService接口


/*** 根据订单Id 查询订单信息* @param orderId* @return*/
OrderInfo getOrderInfo(Long orderId);

实现类: 


@Override
public OrderInfo getOrderInfo(Long orderId) {OrderInfo orderInfo = orderInfoMapper.selectById(orderId);QueryWrapper<OrderDetail> queryWrapper = new QueryWrapper<>();queryWrapper.eq("order_id", orderId);List<OrderDetail> orderDetailList = orderDetailMapper.selectList(queryWrapper);orderInfo.setOrderDetailList(orderDetailList);return orderInfo;
}
OrderApiController
/*** 内部调用获取订单* @param orderId* @return*/
@GetMapping("inner/getOrderInfo/{orderId}")
public OrderInfo getOrderInfo(@PathVariable(value = "orderId") Long orderId){return orderService.getOrderInfo(orderId);
}

在service-order-client添加远程调用接口

OrderFeignClient


/*** 获取订单* @param orderId* @return*/
@GetMapping("/api/order/inner/getOrderInfo/{orderId}")
OrderInfo getOrderInfo(@PathVariable(value = "orderId") Long orderId);
OrderDegradeFeignClient

@Override
public OrderInfo getOrderInfo(Long orderId) {return null;
}

 

- server-gateway模块网关配置

- id: web-paymenturi: lb://web-allpredicates:- Host=payment.gmall.com
- id: service-paymenturi: lb://service-paymentpredicates:- Path=/*/payment/** # 路径匹配

(5)创建支付控制器PaymentController

Web-all模块

 

package com.atguigu.gmall.payment.controller;
@Controller
public class PaymentController {@Autowiredprivate OrderFeignClient orderFeignClient;/*** 支付页* @param request* @return*/@GetMapping("pay.html")public String success(HttpServletRequest request, Model model) {String orderId = request.getParameter("orderId");OrderInfo orderInfo = orderFeignClient.getOrderInfo(Long.parseLong(orderId));model.addAttribute("orderInfo", orderInfo);return "payment/pay";}
}

 页面渲染


<div class="checkout-tit"><h4 class="tit-txt"><span class="success-icon"></span><span  class="success-info">订单提交成功,请您及时付款,以便尽快为您发货~~</span></h4><div class="paymark"><span class="fl">请您在提交订单<em class="orange time">4小时</em>之内完成支付,超时订单会自动取消。订单号:<em th:text="${orderInfo.id}">00</em></span><span class="fr"><em class="sui-lead">应付金额:</em><em  class="orange money" th:text="'¥'+${orderInfo.totalAmount}">¥1</em></span></div>
</div>

跳转到支付页面:


http://www.ppmy.cn/news/1522312.html

相关文章

DAY53

字符串接龙 import java.util.*;public class Test {public static int bfs(String beginStr,String endStr,List<String> wordList){HashSet<String> setnew HashSet<>(wordList);Queue<String> quenew LinkedList<>();HashMap<String,Inte…

图形语言传输格式glTF和三维瓦片数据3Dtiles(b3dm、pnts)学习

文章目录 一、3DTiles二、b3dm三、glTF1.glTF 3D模型格式有两种2.glTF 场景描述结构和坐标系3.glTF的索引访问与ID4.glTF asset5.glTF的JSON结构scenesscene.nodes nodesnodes.children transformations对外部数据的引用buffers 原始二进制数据块&#xff0c;没有固有的结构或含…

[论文笔记] LLM大模型剪枝篇——1、调研

Attention Is All You Need But You Don’t Need All Of It For Inference of Large Language Models LLaMA2在剪枝时,跳过ffn和跳过full layer的效果差不多。相比跳过ffn/full layer,跳过attention layer的影响会更小。 跳过attention layer:7B/13B从100%参数剪枝到66%,平…

【Linux】Linux常见指令以及权限理解(上)

【Linux】Linux常见指令以及权限理解 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;Linux&#x1f34a; &#x1f33c;文章目录&#x1f33c; 1. Linux背景 1.1 Linux发展史 1.1.1 Unix发展历史 1.1.2 Linux发展历史 1.2 开源 1.3 企…

PostgreSQL常用函数用法

在PostgreSQL中&#xff0c;函数是处理和操作数据的强大工具。以下是一些常用函数的用法示例。 1. 字符串函数 字符串函数用于操作和处理文本数据&#xff0c;常见操作包括字符串连接、截取、替换、转换大小写等。 LENGTH: 返回字符串的长度。-- 查询语句 SELECT LENGTH(Post…

【word导出带图片】使用docxtemplater导出word,通知书形式的word

一、demo-导出的的 二、代码操作 1、页面呈现 项目要求&#xff0c;所以页面和导出来的word模版一致 2、js代码【直接展示点击导出的js代码】 使用插件【先下载这五个插件&#xff0c;然后页面引入插件】 import docxtemplater from docxtemplater import PizZip from pizzip …

Linux基础入门 --8 DAY

文件权限管理 设置文件的所有者chown 格式&#xff1a; chown [OPTION]... [OWNER][:[GROUP]] FILE... chown [OPTION]... --referenceRFILE FILE... 示例&#xff1a; chown admin&#xff08;所有者&#xff09;&#xff1a;admin&#xff08;所属组&#xff09;f1.txt cho…

Linux下构建Docker镜像

Docker在Linux构建镜像 Docker是一种轻量级的容器化技术&#xff0c;可以让开发者将应用程序及其所有依赖项打包到一个独立的容器中&#xff0c;从而实现跨平台和快速部署&#xff0c;在Linux系统上&#xff0c;我们可以使用D0cker来构建自己的镜像&#xff0c;并且可以通过简…

Win32函数调用约定(Calling Convention)

平常我们在C#中使用DllImportAttribute引入函数时&#xff0c;不指明函数调用约定(CallingConvention)这个参数&#xff0c;也可以正常调用。如FindWindow函数 [DllImport("user32.dll", EntryPoint"FindWindow", SetLastError true)] public static ext…

SpringBoot实现前后端传输加密设计

在Web应用中&#xff0c;确保前后端之间的数据传输安全是非常重要的。这通常涉及到使用HTTPS协议、数据加密、令牌验证等安全措施。本文通过将前后端之间的传输数据进行加密&#xff0c;用于在Spring Boot应用中实现前后端传输加密设计。 一、数据加密方案 即使使用了HTTPS&…

IP地址中的子网掩码

目录 一、子网掩码的概念 二、引入子网掩码的原因 1. 网络分段&#xff08;Subnetting&#xff09; 2. IP地址的组织 3. 有效利用IP地址 4. 减少广播域 5. 支持路由 三、子网掩码的划分 例子1 例子2 1. 子网掩码的二进制表示 2. 网络地址 3. 广播地址 4. 可用主机…

C++语法知识点合集:7.string类

文章目录 一、标准库中的string类1.string类2.auto和范围for3.string类的常用接口说明 二、string类的模拟实现1. 经典的string类问题2.浅拷贝3.深拷贝 一、标准库中的string类 1.string类 string是表示字符串的字符串类该类的接口与常规容器的接口基本相同&#xff0c;再添加…

【微处理器系统原理与应用设计第八讲】程序设计的开发框架包括编程语言、程序的基本要素、汇编程序结构、集成开发环境

一、编程语言 从处理器的角度看&#xff1a;一个指令只是一个操作&#xff0c;那么执行多条指令构成的程序就是完成一个完整功能的操作。 从程序执行的角度看&#xff1a;处理器读取指令后译码执行&#xff0c;完成所有操作。 从程序设计的角度看&#xff1a;用指令来描述所…

F12抓包06-3:浏览器导入/导出请求

使用场景&#xff1a;比如测试过程中通过抓包排查的问题&#xff0c;可以将请求记录导出给开发查看。 使用的是HAR文件&#xff0c;即HTTP归档格式(HTTP Archive Format)&#xff0c;是用于记录HTTP会话信息的文件格式。 ① 抓包&#xff1a;鼠标右键打开“检查”工具&#xff…

远心镜头选型公式

在当今的机器视觉领域&#xff0c;远心镜头凭借其独特的远心光路设计以及超低畸变、高远心度和高景深等特点&#xff0c;成为尺寸测量和视觉对位中的得力工具。然而&#xff0c;如何进行快速而准确的选型呢&#xff1f;答案就在于选型公式&#xff1a;倍率 焦距 N.A.Sensor 尺…

Transiting from CUDA to HIP(三)

一、Workarounds 1. memcpyToSymbol 在 HIP (Heterogeneous-compute Interface for Portability) 中&#xff0c;hipMemcpyToSymbol 函数用于将数据从主机内存复制到设备上的全局内存或常量内存中&#xff0c;这样可以在设备端的内核中访问这些数据。这个功能特别有用&#x…

2024最新Redis面试题含答案

&#xff08;3&#xff09;、队列 Reids在内存存储引擎领域的一大优点是提供 list 和 set 操作&#xff0c;这使得Redis能作为一个很好的消息队列平台来使用。Redis作为队列使用的操作&#xff0c;就类似于本地程序语言&#xff08;如Python&#xff09;对 list 的 push/pop 操…

Shell教程_在Bash_Shell中使用for循环详解

Shell教程_在Bash_Shell中使用for循环详解 在编程语言中, 循环是必不可少的组件, 当您想要一遍又一遍地重复代码直到满足指定条件时使用。 在 Bash 脚本中, 循环扮演着几乎相同的角色, 并用于自动执行重复性任务, 就像在编程语言中一样。 在 Bash 脚本中, 有 3 种类型的循环…

Component name “Find“ should always be multi-word

出现原因 这个是vue的vue文件名校验&#xff0c;意思是你的组件文件名应为多个单词且大驼峰&#xff0c;这样语义性更强&#xff0c; 解决方法 可采用3种方法解决 如果解决不了记得重启vue工程 1.改文件名 比如FindIndex,如此大驼峰 2.给组件添加name属性&#xff0c;注…

坐牢第三十六天(QT)

自定义QQ界面 wedget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug> //qt中信息调试类 #include <QIcon> //图标类 #include <QPushButton>//按钮类 #include <QLabel> //标签类 #include <QMovie> //动图类…