后端---最全最简单细致的Java接入微信支付接口(Native接入)

首先,我简单总结一下这几天搞微信支付和支付宝支付接口的体会,通过这几天的动手实操,加强了自己对SSM框架的认识,以及对业务逻辑的思路,明白了许多以前不懂的许多空白。
做支付宝接口的接入完全可以按照支付宝官方所给的Demo和文档,稍加整合即可获得自己想要的代码实现。
做微信支付接口接入,官方文档负责参考所需传递的参数,Demo完全没必要去下(鸡肋),觉得最靠谱的还是在Github找一个有注释的完整Demo自己细细品味,而且微信的沙箱环境想要用的话还要注册一堆东西,真的特别零散。
不废话了。。。。直接放图来看:
根据应用场景选择实现模式
Native支付可分为两种模式,商户根据支付场景选择相应模式。
【模式一】:商户后台系统根据微信支付规则链接生成二维码,链接中带固定参数productid(可定义为产品标识或订单号)。用户扫码后,微信支付系统将productid和用户唯一标识(openid)回调商户后台系统(需要设置支付回调URL),商户后台系统根据productid生成支付交易,最后微信支付系统发起用户支付流程。
商户支付回调URL设置指引:进入商户平台–>产品中心–>开发配置,进行配置和修改,如图6.6所示。

图6.6 Native支付回调URL设置
设置完成后,详细接入步骤:模式一
【模式二】:商户后台系统调用微信支付【统一下单API】生成预付交易,将接口返回的链接生成二维码,用户扫码后输入密码完成支付交易。注意:该模式的预付单有效期为2小时,过期后无法支付。详细接入步骤:模式二
上面微信支付的业务逻辑和上一篇博客所提到的支付宝支付逻辑大同小异,无非不用的是支付宝支付,跳转的是支付宝统一的支付页面,而微信支付发起支付是生成一个二维码传给你的服务器,再由你展示给客户,当客户完成支付时再由微信分别异步通知给服务器和客服。
我们来看一下这个项目的整个目录结构:
1.是Controller层,前端的所有逻辑都要通过该层,
2.是微信支付的整个逻辑,里面有config(参数配置),util(工具类),service和seviceimpl(业务逻辑实现层),entitys(实体类),当发起一个微信支付请求的时候,Controller层的方法直接调用serviceimpl业务实现层的方法生成一个url由前端拼接到二维码上。
3.是一个开源的Sid包,用来生成独一无二的订单号id
4.是springmvc的配置文件
5.是一个前端的管理工具叫做bower,有兴趣的可以自己去百度
6.是前端所有的页面
OK,我们通过一次支付实现来完成整个项目的演示:
在上面的框输入这个地址访问后端Controller的AlipayController的alipy/products方法通过该方法返回一个前端页面products.jsp页面,在该页面显示我们的产品列表,点击购买后跳转到后端Controller的AlipayController的alipay/goConfirm方法,然后通过该方法在返回一个ModelAndView,返回至goConfirm.jsp页面
我们在这里填写想要购买的个数后,点击ajax提交订单还是回跳转到刚才的Controller的alipay/goPay方法里面,再返回至goPay页面:
在这里有两种支付方式我们点击 微信扫码支付,这时前端通过form表单提交订单的相关信息到这个:
在这个Controller层会调用
在这个方法里面会生成向微信支付接口递交的相关信息,生成Xml格式的信息通过下面这个工具类提交到微信支付后台的服务器上,微信也会给我们返回一个Xml格式的数据,里面包括了用户要扫码的Url地址:
然后再由刚才的Controller层将这个Url传给前端:
通过前端JQuery提供的一个二维码的生成方法,来显示它:
最后显示的页面如下:
到此!整个支付接口已经全部开发基本算完毕,再需要的是我们要考虑网络传输的安全性,代码能否经受住实际环境的考验,因为我并没有申请微信商家号,所有这一份功能还需要大家自己完善。
在这里给出sql语句,在自己的Mysql上运行即可:
/*
SQLyog Ultimate v12.5.1 (64 bit)
MySQL - 5.7.22 : Database - alipay


/
/
!40101 SET NAMES utf8 /;
/
!40101 SET SQL_MODE=’’/;
/
!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 /;
/
!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 /;
/
!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=‘NO_AUTO_VALUE_ON_ZERO’ /;
/
!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 /;
CREATE DATABASE /
!32312 IF NOT EXISTS*/alipay /*!40100 DEFAULT CHARACTER SET utf8mb4 */;
USE alipay;
/*Table structure for table flow */
DROP TABLE IF EXISTS flow;
CREATE TABLE flow (
id varchar(20) NOT NULL,
flow_num varchar(20) DEFAULT NULL COMMENT ‘流水号’,
order_num varchar(20) DEFAULT NULL COMMENT ‘订单号’,
product_id varchar(20) DEFAULT NULL COMMENT ‘产品主键ID’,
paid_amount varchar(11) DEFAULT NULL COMMENT ‘支付金额’,
paid_method int(11) DEFAULT NULL COMMENT ‘支付方式\r\n 1:支付宝\r\n 2:微信’,
buy_counts int(11) DEFAULT NULL COMMENT ‘购买个数’,
create_time datetime DEFAULT NULL COMMENT ‘创建时间’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘流水表’;
/*Data for the table flow */
/*Table structure for table orders */
DROP TABLE IF EXISTS orders;
CREATE TABLE orders (
id varchar(20) NOT NULL,
order_num varchar(20) DEFAULT NULL COMMENT ‘订单号’,
order_status varchar(20) DEFAULT NULL COMMENT ‘订单状态\r\n 10:待付款\r\n 20:已付款’,
order_amount varchar(11) DEFAULT NULL COMMENT ‘订单金额’,
paid_amount varchar(11) DEFAULT NULL COMMENT ‘实际支付金额’,
product_id varchar(20) DEFAULT NULL COMMENT ‘产品表外键ID’,
buy_counts int(11) DEFAULT NULL COMMENT ‘产品购买的个数’,
create_time datetime DEFAULT NULL COMMENT ‘订单创建时间’,
paid_time datetime DEFAULT NULL COMMENT ‘支付时间’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘订单表’;
/*Data for the table orders */
insert into orders(id,order_num,order_status,order_amount,paid_amount,product_id,buy_counts,create_time,paid_time) values
(‘1812207R22F6DM14’,‘1812207R22F6DM14’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-20 10:51:46’,NULL),
(‘1812207S7CN814M8’,‘1812207S7CN814M8’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-20 10:55:21’,NULL),
(‘1812207S87PPY79P’,‘1812207S87PPY79P’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-20 10:55:26’,NULL),
(‘1812208CY53HRRYW’,‘1812208CY53HRRYW’,‘10’,‘34.0’,NULL,‘1’,34,‘2018-12-20 11:51:24’,NULL),
(‘1812208HW44KTDYW’,‘1812208HW44KTDYW’,‘10’,‘34.0’,NULL,‘1’,34,‘2018-12-20 12:03:11’,NULL),
(‘1812208KD75YTKGC’,‘1812208KD75YTKGC’,‘10’,‘34.0’,NULL,‘1’,34,‘2018-12-20 12:05:01’,NULL),
(‘181220ASYCGYY428’,‘181220ASYCGYY428’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-20 15:09:35’,NULL),
(‘181220ASZY889K1P’,‘181220ASZY889K1P’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-20 15:09:45’,NULL),
(‘181220GM4PMR5CDP’,‘181220GM4PMR5CDP’,‘10’,‘20.0’,NULL,‘1’,20,‘2018-12-20 21:55:36’,NULL),
(‘1812219SF42HKSY8’,‘1812219SF42HKSY8’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-21 13:44:12’,NULL),
(‘1812219SFG49P18H’,‘1812219SFG49P18H’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-21 13:44:15’,NULL),
(‘181221DCZZMB5PZC’,‘181221DCZZMB5PZC’,‘10’,‘2.0’,NULL,‘1’,2,‘2018-12-21 18:51:56’,NULL),
(‘181221DGKAR7CD1P’,‘181221DGKAR7CD1P’,‘10’,‘2000.0’,NULL,‘1’,2000,‘2018-12-21 18:59:49’,NULL),
(‘181221FGG6X50PH0’,‘181221FGG6X50PH0’,‘10’,‘253.0’,NULL,‘1’,253,‘2018-12-21 20:23:39’,NULL);
/*Table structure for table product */
DROP TABLE IF EXISTS product;
CREATE TABLE product (
id varchar(20) NOT NULL,
name varchar(20) DEFAULT NULL COMMENT ‘产品名称’,
price varchar(11) DEFAULT NULL COMMENT ‘价格’,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品表 ';
/*Data for the table product */
insert into product(id,name,price) values
(‘1’,‘辣条’,‘1.0’);
/*Table structure for table user */
DROP TABLE IF EXISTS user;
CREATE TABLE user (
id varchar(20) NOT NULL,
username varchar(128) DEFAULT NULL,
sex varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘用户表’;
/*Data for the table user /
/
!40101 SET SQL_MODE=@OLD_SQL_MODE /;
/
!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS /;
/
!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS /;
/
!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

加裙 柳丝零3583儿儿 有很多老师不定时帮大家讲解 也有大公司一些大佬 每天分享想工作经验 有兴趣的小伙伴可以加 群文件有老师上传的资料有用到的自己下

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值