stripe支付 新版paymentIntent(付款意图) demo代码 可参考.
/**
* @program: test
* @description: stripe 支付charge方式 旧版
* @author: 闲走天涯
* @create: 2021-09-02 13:48
*/
public class ChargeTest {
// key格式 sk_test开头为测试环境key,sk_live开头为生产环境key
private static final String privateKey = "test_key";
/**
* 创建token
* 用于卡信息加密
* @param creditCard
* @return
*/
public static Token createToken(CreditCard creditCard){
try{
Stripe.apiKey = privateKey;
Map<String, Object> cardParam = new HashMap<>();
Map<String, Object> card = new HashMap<>();
card.put("exp_month",creditCard.getCardExpiryMonth());
card.put("exp_year",creditCard.getCardExpiryYear());
card.put("number",creditCard.getCardNo());
card.put("cvc",creditCard.getCvv());
card.put("name",creditCard.getName());
cardParam.put("card", card);
Token token = Token.create(cardParam);
if(token != null && VerifyData.strIsNotNull(token.getId())){
return token;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 创建stripe客户对象并绑定银行卡信息
* @param tokenId 加密后的卡信息token对象id
* @param email
* @param name
* @return
*/
public static Customer createCustomer(String tokenId,String email,String name){
Stripe.apiKey = privateKey;
try {
//创建客户并绑定支付卡信息
Map<String, Object> customerParams = new HashMap<>();
customerParams.put("source", tokenId);
if(VerifyData.strIsNotNull(email)){
customerParams.put("email",email);
}
if(VerifyData.strIsNotNull(name)){
customerParams.put("name",name);
}
Customer customer = Customer.create(customerParams);
if(customer!=null && VerifyData.strIsNotNull(customer.getId())) {
return customer;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 删除stripe客户对象
* @param customerId stripe客户对象id
* @return
*/
public static Customer deleteCustomer(String customerId){
Stripe.apiKey = privateKey;
try {
//检索对象
Customer customer = Customer.retrieve(customerId);
//删除
Customer customer1 = customer.delete();
return customer1;
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 创建 支付(授权冻结卡资金或者 直接扣款)
* @param orderCode 订单编号
* @param frozenAmount 需要授权的金额
* @param customerId stripe客户对象id
* @return
*/
public static Charge createCharge(String orderCode, Double frozenAmount, String customerId){
try{
Stripe.apiKey = privateKey;
//以分为单位
BigDecimal decimalAmount = new BigDecimal(frozenAmount);
decimalAmount = decimalAmount.multiply(new BigDecimal(100));
Map<String, Object> params = new HashMap<>();
//金额
params.put("amount", decimalAmount.intValue());
//货币符号 巴西雷亚尔
params.put("currency", "BRL");
//是否立即扣款
params.put("capture", false);
//客户id
params.put("customer", customerId);
//描述前缀
params.put("statement_descriptor_suffix", "c:"+orderCode);
//完整描述 必须带字母 且不超过22字符
params.put("statement_descriptor", "amount "+decimalAmount.intValue());
Charge charge = Charge.create(params);
System.out.println("create charge请求结果="+ JSON.toJSONString(charge));
if(charge!=null && VerifyData.strIsNotNull(charge.getId())) {
return charge;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 捕获金额或撤销冻结
* @return
*/
public static Charge captureCharge(String chargeId, Double captureAmount){
try{
Stripe.apiKey = privateKey;
//检索
Charge charge = Charge.retrieve(chargeId);
Charge charge2 = null;
if(captureAmount==0){//撤销
ChargeTest.cancelCharge(chargeId);
charge2 = Charge.retrieve(chargeId);
}else{//捕获
//以分为单位
BigDecimal decimalAmount = new BigDecimal(captureAmount);
decimalAmount = decimalAmount.multiply(new BigDecimal(100));
Map<String, Object> chargeParam = new HashMap<>();
chargeParam.put("amount", decimalAmount.intValue());
charge2 = charge.capture(chargeParam);
}
System.out.println("capture charge请求结果="+ JSON.toJSONString(charge2));
if(charge2!=null && VerifyData.strIsNotNull(charge2.getId())) {
return charge2;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 取消支付
* @param chargeId
* @return
*/
public static Refund cancelCharge(String chargeId){
try{
Stripe.apiKey = privateKey;
Map<String, Object> refundParam = new HashMap<>();
refundParam.put("charge", chargeId);
Refund refund = Refund.create(refundParam);
System.out.println("退款请求结果="+ JSON.toJSONString(refund));
if(refund!=null && VerifyData.strIsNotNull(refund.getId())) {
return refund;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 退款
* @param chargeId
* @return
*/
public static Refund refundCharge(String chargeId,Double amount){
try{
if(amount<=0){
System.out.println("金额不能低于等于0");
return null;
}
Stripe.apiKey = privateKey;
//以分为单位
BigDecimal refundAmount = new BigDecimal(amount);
refundAmount = refundAmount.multiply(new BigDecimal(100));
Map<String, Object> refundParam = new HashMap<>();
refundParam.put("charge", chargeId);
refundParam.put("amount", refundAmount);
Refund refund = Refund.create(refundParam);
System.out.println("退款请求结果="+ JSON.toJSONString(refund));
if(refund!=null && VerifyData.strIsNotNull(refund.getId())) {
return refund;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 检索
* @param chargeId
* @return
*/
public static Charge retrieveCharge(String chargeId){
try{
Stripe.apiKey = privateKey;
Charge charge = Charge.retrieve(chargeId);
System.out.println("检索请求结果="+ JSON.toJSONString(charge));
if(charge!=null && VerifyData.strIsNotNull(charge.getId())) {
return charge;
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
public static void main(String[] args) throws StripeException {
String orderCode = "21163056451908210952";//订单编号
Double frozenAmount = 100d;//授权冻结的资金
Double captureAmout = 0d;//需要扣款的金额
CreditCard creditCard = new CreditCard();
creditCard.setCardNo("4242424242424242");
creditCard.setCardExpiryYear("2026");
creditCard.setCardExpiryMonth("8");
creditCard.setCvv("123");
creditCard.setEmail("test_user_123456@testuser.com");
creditCard.setName("qatest123456");
//1.创建token,加密卡信息
Token token = ChargeTest.createToken(creditCard);
if(token==null){
System.out.println("获取token失败");
}
//2.创建客户对象 并绑卡
Customer customer = ChargeTest.createCustomer(token.getId(),creditCard.getEmail(),creditCard.getName());
if(customer==null){
System.out.println("获取customer失败");
}
//3.创建支付对象
Charge charge = ChargeTest.createCharge(orderCode,frozenAmount,customer.getId());
if(charge==null){
System.out.println("获取charge失败");
}
//4.捕获或撤销授权
Charge charge2 = ChargeTest.captureCharge(charge.getId(),captureAmout);
//5.退款
Refund refund = ChargeTest.refundCharge(charge.getId(),captureAmout);
ChargeTest.retrieveCharge(charge.getId());
}
}
@Data
class CreditCard {
private String cardNo; //卡号
private String cardExpiryYear;//过期年
private String cardExpiryMonth;//过期月
private String cvv;
private String email;//邮箱
private String name;//名称
}