[超简单]vue+SpringBoot实现微信支付demo并且部署Jenkins自动部署到服务器

发布于:2023-01-17 ⋅ 阅读:(1049) ⋅ 点赞:(0)

 效果如下:(百度云服务器微信支付demo前端展示) 请勿付款功能正常

http://180.76.176.194:8081


创建一个Java的SpringBoot的项目,导入微信官方sdk和 httpclient 依赖
 

  <!--        微信支付sdk-->
        <dependency>
            <groupId>com.github.wxpay</groupId>
            <artifactId>wxpay-sdk</artifactId>
            <version>0.0.3</version>
        </dependency>
        <!--        httpclient-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>

在这里SpringBoot的项目的version可以低一点,高点的会出现一个报错启动不了的问题


后端代码:

 完整Java后端项目代码 -> gitee地址:https://gitee.com/D0uZi/wxpay_01.githttps://gitee.com/D0uZi/wxpay_01.git

数据库文件下载:  https://pan.livemz.cn/微信支付demo[vue+SpringBoot]https://pan.livemz.cn/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98demo%5Bvue+SpringBoot%5D


问题处理:

此处填写自己的 ------------------ 关于下面代码里的参数可以看官方文档介绍:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1

package com.example.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.dao.OrderMapper;
import com.example.enetity.Order;
import com.example.untils.CommonResult;
import com.example.untils.HttpClient;
import com.github.wxpay.sdk.WXPayUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author DouZi
 * @Blog areone.top
 */
@Service
public class OrderService {
    @Autowired
    private OrderMapper orderMapper;
    @Value("${weixin.appid}")
    private String appId;
    @Value("${weixin.mch_id}")
    private String mchId;
    @Value("${weixin.api_key}")
    private String apiKey;

    public CommonResult createNavite(String orderNo) {
        //根据订单号查询出订单信息
        QueryWrapper<Order> wrapper = new QueryWrapper<>();
        wrapper.eq("order_no", orderNo);
        wrapper.eq("status", 0);
        Order order = orderMapper.selectOne(wrapper);
        if (order != null) {
            try {
                Map<String, String> param = new HashMap<>();
                param.put("appid", appId);
                param.put("mch_id", mchId);
                param.put("nonce_str", WXPayUtil.generateNonceStr());
                param.put("body", order.getCourseTitle());
                param.put("out_trade_no", orderNo);
//                param.put("total_fee", new BigDecimal(order.getTotalFee())
//                        .multiply(new BigDecimal(100)).longValue() + "");
                param.put("total_fee", new BigDecimal(0.01)
                        .multiply(new BigDecimal(100)).longValue() + "");
                param.put("spbill_create_ip", "127.0.0.1");
                param.put("notify_url", "http://127.0.0.1:8809/pay/back");
                param.put("trade_type", "NATIVE");
                HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");
                client.setHttps(true);//支持Https协议
                client.setXmlParam(WXPayUtil.generateSignedXml(param, apiKey));
                //发送请求
                client.post();
                //获取请求的相应结果
                String content = client.getContent();
//                System.out.println(content);
                Map<String, String> map = WXPayUtil.xmlToMap(content);
                if (map.get("result_code").equals("SUCCESS")) {
                    Map<String, Object> map1 = new HashMap<>();
                    map1.put("codeUrl", map.get("code_url"));
                    map1.put("price", order.getTotalFee());
                    map1.put("orderNo", orderNo);
                    return new CommonResult(2000, "成功生成二维码", map1);
                }

            } catch (Exception e) {

            }
        }
        return new CommonResult(5000, "订单失效", null);
    }

    public CommonResult queryPayStatus(String orderNo) {
        try {
            //根据订饭状态查询微信支付情况
            HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/orderquery");
            Map<String, String> map = new HashMap<>();
            map.put("appid", appId);
            map.put("mch_id", mchId);
            map.put("out_trade_no", orderNo);
            map.put("nonce_str", WXPayUtil.generateNonceStr());
            client.setHttps(true);//支持Https协议
            client.setXmlParam(WXPayUtil.generateSignedXml(map, apiKey));
            //发送请求
            client.post();
            //获取请求的相应结果
            String content = client.getContent();
//                System.out.println(content+"订单状态===============================");
            Map<String, String> map1 = WXPayUtil.xmlToMap(content);
            if (map1.get("trade_state").equals("SUCCESS")) {
                //支付通过修改订单状态,往支付记录表添加支付记录
                Order order = new Order();
                order.setStatus(1);
                order.setGmtModified(
                        new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
                                .format(new Date())
                );
                QueryWrapper<Order> wrapper = new QueryWrapper<>();
                wrapper.eq("order_no", orderNo);
                wrapper.eq("status", 0);
                orderMapper.update(order, wrapper);
                return new CommonResult(2000,"微信支付成功",null);
            }
        } catch (Exception e) {

        }
        return new CommonResult(5000,"微信支付失败",null);
    }
}

 前端vue代码:https://pan.livemz.cn/微信支付demo[vue+SpringBoot]https://pan.livemz.cn/%E5%BE%AE%E4%BF%A1%E6%94%AF%E4%BB%98demo%5Bvue+SpringBoot%5D

在代码目录下执行 

 安装相关的依赖

启动代码:

 完成:

 注意:

前端代码此处为检测支付的状态 


使用  Jenkins  服务器 自动部署项目从A服务器到B服务器

首先准备A,B两台服务器

先做A,B无密登陆:

在jenkins所在的服务器(A服务器)上输入如下命令

ssh-keygen -t rsa

(2)接下来需要将公钥导入到认证文件中

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

(3)给对应文件授权

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

(4)把A服务器上的公钥复制到B服务器上

scp -p ~/.ssh/id_rsa.pub root@B服务器的ip地址:/root/.ssh/authorized_keys

测试A登录B服务器

ssh B服务器的ip

在A机器上安装Jenkins

 启动该war包

nohup java -jar /usr/local/jenkins.war  --httpPort=8777 --httpsPort=8778 > /usr/local/jenkins.log 2>&1 &

-- nohup:如果虚拟机休眠时不关闭jenkins
-- >: 启动时生成的日志放入
-- &: 后台运行

访问jenkins :

ip:8777 

 查看首次登录的密码:

 选择默认安装等待即可

 选择

 修改Jenkins后台密码:

集成jdk(如下图)

在jenkins所在的服务上安装jdk并配置环境变量。
【1】解压jdk软件
 [2]vi /etc/profile
    export JAVA_HOME=JDK的安装路径
    export PATH=$PATH:$JAVA_HOME/bin
 [3] source /etc/profile    

 

集成maven : 

必须在我们jenkins所在的服务器,安装maven.

  1. 安装包解压

  2. 配置maven的环境变量

  3. 修改maven的镜像

 

 安装Maven插件

集成git:

在jenkins所在的服务器上安装git软件
yum install -y git

查看是否安装git
git --version

 测试jenkins会不会从gitee拉取代码

 

 

 

 

记得去安装maven依赖和gitee依赖否则上边的不会显示 :

 

 shell脚本如下:

#!/bin/bash

echo "部署的目录和项目名称"
DIR="/data/app"
projectName="my-boot02"

echo "待部署的应用服务器,可多台"
#你的 B服务器的ip  不需要部署Jenkins
server_ips="43.xxxxxxx"  
for server_ip in ${server_ips[@]}
do

echo "ssh连接进行备份操作"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/backup/${projectName}
mkdir -p $DIR/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
  mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-`date "+%Y%m%d_%H%M%S"`.jar 
fi
EOF

echo "拷贝jar包到目标服务器的tmp目录"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar

echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
sh $DIR/${projectName}/stop.sh
sh $DIR/${projectName}/start.sh
EOF

done

echo "success"

自动拉取gitee

 获取自动拉取的密钥:

 对应你的gitee后端代码仓库:

 点击测试Jenkins会自动编译

 

 编译完成即可访问B服务器这个项目:

 通过A服务器的前端访问B服务器的项目,Jenkins搭建后一劳永逸,很巴适的.全自动操作节省很多时间和步骤


网站公告

今日签到

点亮在社区的每一天
去签到