虽然目前相对较火的支付方式是微信支付,但是本人更喜欢支付宝支付,有积分拿,还可以部分提现免手续费,每月还有信用卡还款免手续费额度,捐步数,蚂蚁森林等等,扯远了,总之,对我来说,微信用于沟通,支付宝是支付主力。
以下是支付宝集成到服务器的经验总结
准备工作
使用支付功能,首先是进行注册等等,然后获得相应的 pid 和 appid 以及公钥和私钥;
支付宝小程序开发又有对应的 id 和 公钥私钥对;
申请支付宝开发的具体步骤略,懒得贴图,毕竟还要打码,哈哈
为了快速集成开发,引入了支付宝封装的jar包
alipay-sdk-java-{version}.jar
alipay-trade-sdk-{version}.jar;
之后就可以开始 briskly 的 coding 啦
若是jar包问题,可以私发
初始化加载支付宝配置信息
// 支付宝支付工具类
public final class AlipayHelper {
private AlipayHelper() {
}
private static AlipayTradeService tradeService;
static {
Configs.init("alipay-config.properties");
/// 初始化
tradeService = new AlipayTradeServiceImpl.ClientBuilder().build();
}
public static AlipayTradeService getTradeService() {
return tradeService();
}
}
支付宝小程序中获取用户ID
@Controller
@RequestMapping(value = {
"/requestOf/alipay" })
public class AlipayController {
/**
* /// 获取支付宝用户ID ///
* @param code 用户授权之后获取到的
*/
@ResponseBody
@RequestMapping(value = {
"/attain/user_id/{code}" })
public Map<String,Object> attainUserId(@PathVariable String code) {
// Map自动转换为Json
Map<String,Object> dataMap = new HashMap<>(8,0.1f);
try {
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do", "支付宝小程序APPID",
"私钥字符串","json","UTF-8","公钥字符串","RSA2");
// OAuthToken 验证请求封装类
AlipaySystemOauthTokenRequest request
= new AlipaySystemOauthTokenRequest();
request.setGrantType("authorization_code"); // 验证
request.setCode(code);
// OAuthToken 验证响应封装类
AlipaySystemOauthTokenResponse response
= alipayClient.execute(request);
if(response.isSuccess()){
String userId = response.getUserId();
dataMap.put("user_id", userId);
} else {
dataMap.put("err_msg", response.getCode()
+ "-" + response.getMsg() + "-"
+ + response.getSubCode() + "-"
+ + response.getSubMsg());
}
} catch (AlipayApiException e) {
dataMap.put("err_msg", e.getMessage());
}
return dataMap;
}
}
自有APP调用支付宝支付
@Controller
@RequestMapping(value = {
"/requestOf/alipay" })
public class AlipayController {
/**
* 获取调起支付的参数
*/
@ResponseBody
@RequestMapping(value = {
"/pre/callFor/payment" })
public Map<String,Object> preCallForPayment(String account,Double fee) {
// Map自动转换为Json
Map<String,Object> dataMap = new HashMap<>(8,0.1f);
try {
AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
model.setBody( "自定义字符串,如 缴费支付" );
model.setSubject( "自定义字符串,如 202号楼6单元501室" );
model.setOutTradeNo("自定义的交易单号,如 202101011010101234567890");
model.setTimeoutExpress( "10m" );
model.setTotalAmount( fee ); // 需支付金额:元
model.setProductCode( "产品代码,如 ELECTRICITY_PAYMENT" );
AlipayClient alipayClient = new DefaultAlipayClient(
"https://openapi.alipay.com/gateway.do"