IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Java支付功能实现 -> 正文阅读

[移动开发]Java支付功能实现

Java支付功能实现

导入依赖

<dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
</dependency>
<dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.5.8</version>
</dependency>

生成qrCode

@PostMapping("/show")
	@ApiOperation(value = "添加支付订单", notes = "支付订单添加")
	public String qrCode(@RequestBody @Validated TradeDTO tradeDTO, BindingResult result) throws AlipayApiException{
		if (result.hasErrors()) {
			throw new BindingResultException(result);
		}
		AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","2021003108655493",
				"应用私钥","json","UTF-8","应用共钥","RSA2");
		AlipayTradePrecreateRequest request = new AlipayTradePrecreateRequest();
		request.setNotifyUrl("");
		JSONObject bizContent = new JSONObject();
		bizContent.put("out_trade_no", tradeDTO.getOutTradeNo());
		bizContent.put("total_amount", tradeDTO.getTotalAmount());
		bizContent.put("subject", tradeDTO.getSubject());
		request.setBizContent(bizContent.toString());
		AlipayTradePrecreateResponse response = alipayClient.execute(request);
		if(response.isSuccess()){
			return  response.getBody();
		} else {
			throw new BusinessException(ResultCode.ADD_ACCOUNT.getCode(), "二维码生成失败失败");
		}
	}

检查是否存在

下载支付宝开放平台开发助手

@GetMapping("/pay/{id}")
	@ApiOperation(value = "查询支付订单", notes = "支付订单查询")
public String PayCheck(String id) throws AlipayApiException {
		//获得初始化的AlipayClient
		AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", "2021003108655493", "应用私钥", "json", "UTF-8", "支付宝共钥", "RSA2");
		//创建API对应的request类
		AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
		request.setBizContent("{" +
				"\"out_trade_no\":\""+id+"\"}");  //设置业务参数
		//通过alipayClient调用API,获得对应的response类
		AlipayTradeQueryResponse response = alipayClient.execute(request);
		return response.getBody();
	}

添加订单接口

@PostMapping("/add")
	@ApiOperation(value = "添加支付订单", notes = "支付订单添加")
public Result addTrade(Trade trade, BindingResult result) {
		if (result.hasErrors()) {
			throw new BindingResultException(result);
		}
		boolean save=tradeRepository.save(trade);
		if (save) {
			return Result.ok().message("支付订单添加");
		} else {
			throw new BusinessException(ResultCode.ORDER_ADD);
		}
	}

前端Vue

安装qrcodejs2

npm install qrcodejs2 --save
<el-button class="btn" type="text" @click="dialogVisible = true">立即支付</el-button>
<el-dialog
                title="支付"
                :visible.sync="dialogVisible"
                width="30%">
            <div style="margin-left: 150px" id="code"></div>
            <span slot="footer" class="dialog-footer">
        <el-button @click.once="getQRCode">生成二维码</el-button>
    <el-button type="success" @click="testSuccess">检查成功</el-button>
  </span>
        </el-dialog>
import QRCode from 'qrcodejs2'
data() {
            return {
            successInfo: {},
            dialogVisible: false,
            TradeForm: {
                    //订单编号
                    outTradeNo: undefined,
                    //价格
                    totalAmount: undefined,
                    //订单名称
                    subject: undefined
                },
                payForm: {
                    id: undefined,
                    houseId: undefined,
                    houseName: undefined,
                    userId: undefined,
                    userPhone: undefined,
                    leaseTerm: undefined,
                    price: undefined,
                    touristId: undefined,
                    touristName: undefined,
                    touristPhone: undefined
                }
            }
        }

参考QRCode.js:使用 JavaScript 生成二维码 | 菜鸟教程 (runoob.com)

getQRCode() {
                let qr;
                this.TradeForm.outTradeNo = this.getProjectNum();
                console.log(this.TradeForm.outTradeNo)
                this.TradeForm.totalAmount = this.orderInfo();
                this.TradeForm.subject = this.describeInfo();
                qrCode(this.TradeForm).then(response => {
                    this.page = response;
                    qr = new QRCode("code", {
                        text: this.page.alipay_trade_precreate_response.qr_code,
                        width: 128,
                        height: 128,
                        colorDark: "#000000",
                        colorLight: "#ffffff",
                        correctLevel: QRCode.CorrectLevel.H
                    });
                })
            },

检测成功

testSuccess() {
                console.log(this.TradeForm.outTradeNo)
                payCheck(this.TradeForm.outTradeNo).then(response => {
                    this.successInfo = response;
                    console.log(this.successInfo)
                    if (this.successInfo.alipay_trade_query_response.code == 10000) {
                        this.payForm.id = this.TradeForm.outTradeNo;
                        this.payForm.houseId=this.oInfo().id;
                        this.payForm.houseName=this.oInfo().address+this.oInfo().addressInfo;
                        this.payForm.userId=this.oInfo().userId;
                        this.payForm.userPhone=this.oInfo().phoneNumber;
                        this.payForm.leaseTerm=this.oInfo().leaseTerm;
                        this.payForm.price=this.oInfo().price;
                        this.payForm.touristId=this.loginInfo().id;
                        this.payForm.touristName=this.loginInfo().username;
                        this.payForm.touristPhone=this.loginInfo().phone;
                        addTrade(this.payForm).then(response => {
                            if(response.code===200){
                                clearOrder(this.payForm.touristId).then(response => {
                                    if(response.code===200) {
                                        leaseHouseInfo(this.payForm.houseId).then(response => {
                                            if(response.code===200) {
                                                this.$router.push({path:'/paysuccess'})
                                            }else {
                                                this.$notify({
                                                    title: '警告',
                                                    message: response.message,
                                                    type: 'warning'
                                                });
                                            }
                                        })
                                    }else {
                                        this.$notify({
                                            title: '警告',
                                            message: response.message,
                                            type: 'warning'
                                        });
                                    }
                                })
                            }else {
                                this.$notify({
                                    title: '警告',
                                    message: response.message,
                                    type: 'warning'
                                });
                            }

                        })
                    } else {
                        this.$notify({
                            title: '警告',
                            message: '交易不存在,请重新交易',
                            type: 'warning'
                        });
                    }
                })
            }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:26:11  更:2022-03-03 16:26:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 17:02:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码