package com.fdkankan.pay.util.stripe; import com.fdkankan.pay.common.ResultCode; import com.fdkankan.pay.config.PayConfig; import com.fdkankan.pay.entity.Order; import com.fdkankan.pay.entity.PaypalConfig; import com.fdkankan.pay.entity.StripeConfig; import com.fdkankan.pay.exception.BusinessException; import com.fdkankan.pay.response.OpenPayResponse; import com.fdkankan.pay.service.IStripePriceService; import com.fdkankan.pay.service.IStripeProductService; import com.fdkankan.pay.util.CacheUtil; import com.paypal.api.payments.Payment; import com.stripe.model.Price; import com.stripe.model.Product; import com.stripe.model.checkout.Session; import com.stripe.param.checkout.SessionCreateParams; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.print.attribute.standard.NumberOfInterveningJobs; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.UUID; @Service @Slf4j public class StripeService { @Autowired IStripeProductService stripeProductService; @Autowired IStripePriceService stripePriceService; public Object openPay(Order param, String ipAddr,String lang) { StripeConfig stripeConfig = PayConfig.stripeConfigMap.get(param.getServeId()); if(stripeConfig == null){ throw new BusinessException(ResultCode.PAYPAL_CONFIG_ERROR); } stripeConfig.setSuccessUrl( CacheUtil.mainUrl + stripeConfig.getCallBackUrl() +"/"+param.getOrderSn()+"/"+param.getPayType()+"/success"); stripeConfig.setCancelUrl( CacheUtil.mainUrl + stripeConfig.getCallBackUrl() +"/"+param.getOrderSn()+"/"+param.getPayType()+"/cancel"); //stripe支付 if(param.getPayType() == 6 ){ return this.createPay(param,stripeConfig,lang); } throw new BusinessException(ResultCode.WX_ORDER_PAY_TYPE_ERROR); } public Object createPay(Order param,StripeConfig stripeConfig,String lang){ try { String productName = StringUtils.isBlank(param.getProductName()) ? "product" :param.getProductName(); String productId = stripeProductService.getByName(productName); if(StringUtils.isBlank(productId)){ throw new BusinessException(ResultCode.STRIPE_ERROR); } String priceId = stripePriceService.getByParam(param.getOrderMoney(),stripeConfig.getCurrency(),productId,param.getAutoPay(),param.getAutoPayTime()); if(StringUtils.isBlank(priceId)){ throw new BusinessException(ResultCode.STRIPE_ERROR); } SessionCreateParams.Mode mode = SessionCreateParams.Mode.PAYMENT; if(param.getAutoPay() == 1){ mode = SessionCreateParams.Mode.SUBSCRIPTION; } SessionCreateParams.Locale locale = SessionCreateParams.Locale.AUTO; if(StringUtils.isNotBlank(lang) ){ locale = SessionCreateParams.Locale.valueOf(lang.toUpperCase()); } SessionCreateParams params4 = SessionCreateParams.builder() .setMode(mode) .setSuccessUrl(stripeConfig.getSuccessUrl()) .setCancelUrl(stripeConfig.getCancelUrl()) .setLocale(locale) .setCustomerEmail(param.getUserName()) .addLineItem( SessionCreateParams.LineItem.builder() .setQuantity(1L) .setPrice(priceId) .build()).putMetadata("orderId", param.getOrderSn()) .build(); Session session = Session.create(params4); OpenPayResponse openPayResponse = new OpenPayResponse(); openPayResponse.setH5Url(session.getUrl()); openPayResponse.setOrderSn(param.getOrderSn()); openPayResponse.setPayType(6); return openPayResponse; }catch (Exception e){ log.info("创建stripe支付失败--{}",e); throw new BusinessException(ResultCode.STRIPE_ERROR); } } public Boolean callBack(HttpServletRequest request, HttpServletResponse response, Order order, String result) { log.info("stripe-callback:{},{}",order,request); Boolean payFlag = false; String trade_no = null; String openId = null; if("cancel".equals(result)){ return false; } try { Map parameterMap = request.getParameterMap(); for (String key : parameterMap.keySet()) { log.info("stripe-callBack--request:{},{}",key,request.getParameter(key)); } }catch (Exception e) { log.error("paypal支付回调异常,errorMsg:{}", e.getMessage()); return false; }finally { //orderService.payResult(order,payFlag,trade_no,openId); } return true; } }