Java支付全家桶:企业级各类支付手段一站式解决方案
第一章我们将对Java企业级支付一站式解决方案有一个初步的认识和了解。第二章我们将进行一个学前的准备,学前准备一共分为4节。我们需要学习并掌握微信、支付宝、银联三种支付方式的区别和差异,学习创建数据库,安装好我们需要用到的开发工具。
创建数据库,以下是sql代码:
```DROP TABLE IF EXISTS tb_order;
CREATE TABLE tb_order (
id int(10) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
code varchar(200) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '流水号',
user_id int(10) UNSIGNED NULL DEFAULT NULL COMMENT '会员ID',
amount decimal(10, 2) UNSIGNED NOT NULL COMMENT '总金额',
payment_type tinyint(3) UNSIGNED NOT NULL COMMENT '支付方式:1微信,2支付宝,3银联',
status tinyint(3) UNSIGNED NOT NULL COMMENT '状态:1未付款,2已付款,3已发货,4已签收',
create_time timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (id) USING BTREE,
UNIQUE INDEX unq_code(code) USING BTREE,
INDEX idx_customer_id(user_id) USING BTREE,
INDEX idx_status(status) USING BTREE,
INDEX idx_create_time(create_time) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '订单表' ROW_FORMAT = Dynamic;
学习了创建数据库之后我们接下来要学习安装并配置好开发环境了,我们需要下载HBuilderX,去官网下载最新版本就行,安装很简单的就是点下一步、下一步就行。接下来我们还需要下载以下这些东西。


第三章就是要学习微信支付的种类、注册微信公众平台账号、
开通小程序支付业务、小程序支付接口原理说明、后端项目用户管理模块、先创建小程序项目、上手体验UNI-APP框架、获取微信登陆临时凭证、编写后端获取open_id程序、提交微信账号登陆请求、执行登陆与注册功能
需要用到的部分代码如下:
1、demo.zip\demo\App.vue
```<script>
export default {
onLaunch: function() {
console.log('App Launch')
},
onShow: function() {
console.log('App Show')
},
onHide: function() {
console.log('App Hide')
}
}
</script>
<style>
/*每个页面公共css */
</style>
2、demo.zip\demo\pages\order\order.vue
<view class="page">
<view class="order" v-for="one in list" :key="one">
<view class="line-1">
<text>订单号:{{one.code}}</text>
<text>{{one.status}}</text>
</view>
<view class="line-2">
<text>假设这里是商品简要信息</text>
</view>
<view class="line-3">
<text>金额:{{one.amount}}元</text>
<button class="pay-btn" type="primary" v-if="one.status=='未付款'" @tap="pay(one.id)">付款</button>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
list: [],
token: ""
}
},
methods: {
pay: function(id) {
let that = this
if (that.appEnv == '微信小程序') {
uni.request({
url: that.url.wx.microAppPayOrder,
method: "POST",
header: {
"token": uni.getStorageSync("token")
},
data: {
"orderId": id
},
success: function(resp) {
// console.log(resp)
let timeStamp = resp.data.timeStamp
let nonceStr = resp.data.nonceStr
let pk = resp.data.package
let paySign = resp.data.paySign
uni.requestPayment({
"timeStamp": timeStamp,
"nonceStr": nonceStr,
"package": pk,
"signType": "MD5",
"paySign": paySign,
success: function() {
uni.showToast({
title: "支付成功"
})
//主动发起请求
uni.request({
url: that.url.wx.updateOrderStatus,
method: "POST",
header: {
"token": uni.getStorageSync("token")
},
data: {
"orderId": id
},
success: function(resp) {
let pages = getCurrentPages()
let page = pages[pages.length - 1]
page.onShow()
},
fail: function() {
console.log("更新订单状态失败")
}
})
},
fail: function() {
uni.showToast({
title: "支付失败"
})
}
})
}
})
} else if (that.appEnv == '支付宝小程序') {
uni.request({
url: that.url.zfb.microAppPayOrder,
method: "POST",
header: {
// "token": uni.getStorageSync("token")
"token": that.token
},
data: {
"orderId": id
},
success: function(resp) {
// console.log(resp)
let prepayId = resp.data.prepayId
uni.requestPayment({
provider: "alipay",
orderInfo: prepayId,
success: function(resp) {
if (resp.resultCode == 9000) {
uni.showToast({
title: "支付成功"
})
uni.request({
url: that.url.zfb.updateOrderStatus,
method: "POST",
header: {
// "token":uni.getStorageSync("token")
"token": that.token
},
data: {
"orderId": id
},
success: function(resp) {
let pages = getCurrentPages()
let page = pages[pages.length - 1]
page.onShow()
},
fail: function() {
console.log("更新订单状态失败")
}
})
}
}
})
},
})
}
else if (that.appEnv == 'H5APP') {
uni.request({
url: that.url.zfb.appPayOrder,
method: "POST",
header: {
"token": uni.getStorageSync("token")
},
data: {
"orderId": id
},
success: function(resp) {
let orderString = resp.data.orderString
const jyAliPay = uni.requireNativePlugin('JY-ALIPAY')
jyAliPay.show({ // 发起支付
if_sanbox: true,
auto_create_order_info: false,
appid: that.zfb.app.appid,
rsa2_private: that.zfb.app.privateKey,
order_info: orderString
}, function(result) { // 支付完成回调
// console.log(result)
if (result.resultStatus == '9000') {
uni.showToast({
title: "付款成功"
})
uni.request({
url: that.url.zfb.updateOrderStatus,
method: "POST",
header: {
"token": uni.getStorageSync("token")
},
data: {
"orderId": id
},
success: function(resp) {
that.loadData()
}
})
} else {
uni.showToast({
title: "付款失败",
icon: "none"
})
}
});
// uni.requestPayment({
// provider:"alipay",
// orderInfo:orderString,
// success:function(){
// },
// fail:function(){
// }
// })
}
})
}
},
loadData: function() {
let that = this
uni.request({
url: that.url.searchUserOrderList,
method: "POST",
header: {
"token": uni.getStorageSync("token")
//"token":that.token
},
data: {
"page": 1,
"length": 20
},
success: function(resp) {
console.log(resp)
let list = resp.data.list
for (let one of list) {
if (one.status == 1) {
one.status = "未付款"
} else if (one.status == 2) {
one.status = "已付款"
} else if (one.status == 3) {
one.status = "已发货"
} else if (one.status == 4) {
one.status = "已签收"
}
one.code = one.code.substr(0, 16)
}
that.list = list
}
})
}
},
onShow: function() {
this.loadData()
}
}
</script>
<style>
.page {
padding: 10px;
}
.order {
padding: 10px;
border-bottom: solid 1px #e0e0e0;
font-size: 16px;
}
.line-1 {
display: flex;
justify-content: space-between;
padding-bottom: 5px;
}
.line-2 {
padding-bottom: 5px;
}
.line-3 {
display: flex;
justify-content: space-between;
align-items: baseline;
}
.pay-btn {
margin: 0;
font-size: 14px;
min-width: 80px;
line-height: 35px;
height: 35px;
border: none;
}
</style>
3、demo.zip\demo\pages\login\login.vue
<template>
<view class="page">
<view class="title">
小熊商城
</view>
<image src="../../static/logo.png" mode="widthFix" class="logo"></image>
<block v-if="appEnv=='H5APP'">
<view class="row">
<input placeholder="用户名" class="input" v-model="username" />
</view>
<view class="row">
<input placeholder="密码" password="password" class="input" v-model="password" />
</view>
</block>
<button @tap="login" open-type="getUserInfo" type="primary" class="btn">登陆系统</button>
</view>
</template>
<script>
export default {
data() {
return {
username: '',
password: ''
}
},
methods: {
login: function() {
let that = this
if (that.appEnv == '微信小程序') {
uni.login({
success: function(resp) {
// console.log(resp)
let code = resp.code
uni.getUserInfo({
success: function(resp) {
//console.log(resp)
let nickname = resp.userInfo.nickName
let avatarUrl = resp.userInfo.avatarUrl
uni.request({
url: that.url.wx.login,
method: "POST",
data: {
"code": code,
"nickname": nickname,
"photo": avatarUrl
},
success: function(resp) {
console.log(resp)
let token = resp.data.token
let expire = resp.data.expire
uni.setStorageSync("token", token)
uni.setStorageSync("expire", expire)
uni.switchTab({
url: "../index/index"
})
}
})
}
})
}
})
}
else if (that.appEnv == '支付宝小程序') {
my.getAuthCode({
scopes: "auth_user",
success: function(resp) {
// console.log(resp)
let authCode = resp.authCode
my.getAuthUserInfo({
success: function(resp) {
// console.log(resp)
let nickName = resp.nickName
let avatar = resp.avatar
uni.request({
url: that.url.zfb.login,
method: "POST",
data: {
"authCode": authCode,
"nickname": nickName,
"photo": avatar
},
success: function(resp) {
console.log(resp)
let token = resp.data.token
let expire = resp.data.expire
console.log(token)
uni.setStorageSync("token", token)
uni.setStorageSync("expire", expire)
uni.switchTab({
url: "../index/index"
})
}
})
}
})
}
})
}
else if (that.appEnv=="H5APP") {
if (!/^[A-Za-z0-9]{3,20}$/.test(that.username)) {
uni.showToast({
title: "用户名格式错误",
icon: "none"
})
} else if (!/^[A-Za-z0-9]{6,20}$/.test(that.password)) {
uni.showToast({
title: "密码格式错误",
icon: "none"
})
} else {
uni.request({
url: that.url.login,
method: "POST",
data: {
"username": that.username,
"password": that.password
},
success: function(resp) {
if (resp.data.code == 0) {
let token = resp.data.token
uni.setStorageSync("token", token)
uni.switchTab({
url: "../index/index"
})
} else {
uni.showToast({
title: "登陆失败",
icon: "none"
})
}
}
})
}
}
}
},
onReady: function() {
}
}
</script>
<style>
.page {
padding: 0 20%;
}
.title {
font-size: 24px;
text-align: center;
font-weight: bold;
margin-top: 80px;
}
.logo {
width: 100px;
margin-left: auto;
margin-right: auto;
display: block;
margin-top: 20px;
margin-bottom: 40px;
}
.row {
padding: 5px 0;
}
.input {
border-bottom: solid 1px #e0e0e0;
font-size: 16px;
padding: 8px 10px;
}
.btn {
margin-top: 25px;
}
</style>
3、demo.zip\demo\pages\index
<view>
index
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
第4章我们将开始学习开发微信小程序支付模块,每节内容如下: 需要创建小程序订单页面、加载订单数据、渲染订单数据、小程序向商户系统发出支付请求、创建支付订单必备的参数、创建支付订单、完成小程序付款、商户系统接收支付结果、封装主动查询订单支付结果、付款之后请求查询支付结果。学习完这一章我们想要总结一下。 demo.zip\demo\pages\cart
<view>
cart
</view>
</template>
<script>
export default {
data() {
return {
}
},
methods: {
}
}
</script>
<style>
</style>
我们需要学习的内容有很多,一共是17章,我已经学习完。有视频和课件代码。如需代码视频或者课件请联系作者。vx(CML46679910)