前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为软件增加支付功能

为软件增加支付功能

作者头像
灬沙师弟
发布2023-09-06 08:18:31
2520
发布2023-09-06 08:18:31
举报
文章被收录于专栏:Java面试教程

如何做一个支付程序

早年做支付程序

需要与银行做数据对接

后来有了各种支付平台

支付宝、微信、PayPal等等

我们如果想在程序里

做一个付费模块

该怎么接入这些渠道呢

支付宝接入步骤

支付宝提供全套开发工具包SDK

只需要按照规范

就能实现支付功能

准备工作

先要创建应用

访问开发平台

https://openhome.alipay.com/develop/manage

进行应用创建

创建后,就会得到appid,以及秘钥对等信息

后面有几个选择

是进行手机app,手机网站或是电脑网站的开发方式

以手机app为例

APP支付使用原生开发

调用支付宝支付SDK

而手机网站支付是则会在网页里调用支付宝页面

方法略有不同

开发工具包的选择

提供通用SDK和简易版SDK

其中通用版功能齐全

简易版对Java、C#、PHP做了简化

入门者可以从简易版入手

大神可以使用通用版

Java开发起步

首先引用maven依赖

以通用版为例

代码语言:javascript
复制
<dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-sdk-java</artifactId>
    <version>4.38.10.ALL</version>
</dependency>

然后就可以写第一段代码了

首先声明几个常量

可以写在属性或是配置文件中

代码语言:javascript
复制
private String serverUrl="https://openapi.alipaydev.com/gateway.do";
private String appId="202300061726712"; //请换成你自己的
private String privateKey="KQWEJHWRFOc..."; //请换成你自己的
private String alipayPublicKey="KQWEJHWRFOc..."; //请换成你自己的

支付行为,涉及到几个核心类

AlipayClient:创建与支付宝的连接

AlipayTradePagePayRequest:交易请求

AlipayTradePagePayResponse:交易响应

看一个例子:

代码语言:javascript
复制
// 初始化连接
AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,privateKey,"json", "UTF-8",alipayPublicKey,"RSA2");

// 创建请求
AlipayOpenPublicTemplateMessageIndustryModifyRequest request = new AlipayOpenPublicTemplateMessageIndustryModifyRequest();

// 请求订单参数
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "202381726391231");
bizContent.put("total_amount", 100.00);
bizContent.put("subject", "付款");
bizContent.put("product_code", "QUICK_MSECURITY_PAY");
request.setBizContent(bizContent);

// 发出请求,获得响应
AlipayTradePagePayResponse response = alipayClient.execute(request); 

if(response.isSuccess()){
    // 成功
    return response.getBody();
}else{
    // 失败
}

以上就是最基本的支付流程

解释一下其中的订单参数

out_trade_no:我方商城的自定义流水号,最大64个字符

total_amount:订单总额,2位小数

subject:订单的标题

product_code:产品码

对于产品码,默认为 QUICK_MSECURITY_PAY

即快捷支付

还有周期支付 CYCLE_PAY_AUTH

例如连续包月就是这种情况

网站支付

有时我们只是开发一个网页

在支付时需要跳转到支付宝

这就需要用到网站支付接入了

示范代码:

代码语言:javascript
复制
AlipayClient alipayClient = new DefaultAlipayClient(serverUrl,appId,privateKey,"json", "UTF-8",alipayPublicKey,"RSA2");

// 使用特殊的request
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();

//异步接收http(s)地址
request.setNotifyUrl("http://www.xiaomian.com/notify");
//同步跳转http(s)地址
request.setReturnUrl("http://www.xiaomian.com/return");

// 请求订单参数
JSONObject bizContent = new JSONObject();
bizContent.put("out_trade_no", "202381726391231");
bizContent.put("total_amount", 100.00);
bizContent.put("subject", "商城付款");
bizContent.put("product_code", "QUICK_MSECURITY_PAY");
request.setBizContent(bizContent);

AlipayTradeWapPayResponse response = alipayClient.pageExecute(request);
if(response.isSuccess()){
    //成功
} else {
    //失败
}

这种情况下进行支付

就会跳转到网页

在支付完成后

会将结果推送给异步地址

代码语言:javascript
复制
http://www.xiaomian.com/notify?total_amount=100.00&buyer_id=2088102116773037&body=矿泉水&trade_no=2023071921001003030200089909&refund_fee=0.00&notify_time=2023-07-19 14:10:49&subject=矿泉水&sign_type=RSA2&charset=utf-8&notify_type=trade_status_sync&out_trade_no=07123123122218&gmt_close=2023-07-19 14:10:46&gmt_payment=20123-07-19 14:10:47&trade_status=TRADE_SUCCESS&version=1.0&sign=kPbQIjX+xQc8F0/A6/AocELIjhhZnGbcBN6G4MM/HmfWL4ZiHM6fWl5NQhzXJusaklZ1LFuMo+lHQUELAYeugH8LYFvxnNajOvZhuxNFbN2LhF0l/KL8ANtj8oyPM4NN7Qft2kWJTDJUpQOzCzNnV9hDxh5AaT9FPqRS6ZKxnzM=&gmt_create=2023-07-19 14:10:44&app_id=2023102700040153&seller_id=2088102119685838&notify_id=4a91b7a78a503640467525113fb7d8bg8e
1.

返回结果去掉sign、sign_type后

需对sign值使用RSA进行解压,验签

验证以下内容:

1.out_trade_no是否我发送的订单号

2.total_amount金额相符

3.seller_id是正确的交易方

4.appid正确

只有全部符合正确

才表示交易是真实的

然后结合trade_status

正确的方式是TRADE_SUCCESS 或 TRADE_FINISHED

TRADE_SUCCESS是支持退款的返回值

TRADE_FINISHED是不支持退款的返回值

今天介绍的支付代码的开发

仅仅是万里长征第一步

付款失败、退款、账单查询、对账

这些一个个功能全部完成

才能称之为一个完善的支付模块

幸好现在有了这么多平台的支撑

让开发也容易了很多

我们迈出的每一步

都是站在前人肩膀之上

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java面试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何做一个支付程序
  • 支付宝接入步骤
  • 准备工作
  • 开发工具包的选择
  • Java开发起步
  • 网站支付
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档