一、支付二维码(预订单)
根据需要购买的信息创建预订单,将订单信息保存到Redis中,并设置有效期,注意生产二维码的链接后的参数可以关联到Redis中的key;
QRCode 为servlet扫码请求的URL;
UUIDUtils.getUUID() 为预订单单号,在servlet请求中截取,然后在Redis中查找对应的Key的数据;
二维码地址:http://kung900519.qicp.io/interface/QRCode/UUIDUtils.getUUID();
二、创建二维码扫码请求地址servlet:QRCodeServlet;微信支付重定向请求servlet:WechatPayServlet;支付宝重定向请求servlet:AliPayServlet;
QRCodeServlet 用于用户使用微信或者支付宝扫码二维码进行客户端识别及重定向到对应的业务处理;
package com.platform.cloudlottery.servlet;
import java.io.IOException;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import com.platform.cloudlottery.common.CommonConfig;
import com.platform.cloudlottery.common.alipay.config.MyAliPayConfig;
import com.platform.cloudlottery.common.wechat.config.WXPublicConfig;
import com.platform.cloudlottery.common.wechat.util.HttpUtil;
import com.platform.cloudlottery.model.SysPayChannel;
import com.platform.cloudlottery.service.Impl.SysPayChannelServiceImpl;
import com.platform.cloudlottery.web.StatusContant.PayTypeConstant;
/**
* @ClassName: QRCodeServlet
* @Description: TODO(根据请求的后缀获取该数据编码对应的数据,并重定向到页面)
* @author chenkun
* @date 2018年12月29日
*
*/
public class QRCodeServlet extends HttpServlet {
private static final long serialVersionUID = -8457626626670970403L;
protected Logger logger = LoggerFactory.getLogger(getClass());
private static final String UrlStr = "QRCode/";
private static final String wechatPay = "wechatPay/";
private static final String aliPay = "aliPay/";
@Autowired
private SysPayChannelServiceImpl payChannelService;
public void init(ServletConfig servletConfig) throws ServletException {
super.init(servletConfig);
SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, servletConfig.getServletContext());
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
logger.info("####################请求开始####################");
String userAgent = request.getHeader("user-agent");
String RequestURL = request.getRequestURL().toString();
logger.info("URL : " + RequestURL);
String ReqInfo = RequestURL.substring(RequestURL.indexOf(UrlStr)+UrlStr.length());
logger.info("URL : " + ReqInfo);
CommonConfig commonConfig = new CommonConfig();
if (userAgent != null && userAgent.contains("AlipayClient")) {
logger.info("来自支付宝");
String redirecturi = HttpUtil.urlEnCode(commonConfig.getDomain() + aliPay + ReqInfo);
logger.info("REDIRECT_URI="+redirecturi);
SysPayChannel channel = payChannelService.selectByChannelType(PayTypeConstant.Alipay);
MyAliPayConfig aliPayConfig = new MyAliPayConfig();
aliPayConfig.setAppId(channel.getAppid());
// 授权页面地址
String requestUrl = aliPayConfig.getAuthgateway();
requestUrl = requestUrl.replace("APPID", aliPayConfig.getAppId()).replace("SCOPE", aliPayConfig.getScope()).replace("REDIRECT_URI", redirecturi);
// 重定向到授权页面
response.sendRedirect(requestUrl);
} else if (userAgent != null && userAgent.contains("MicroMessenger")) {
logger.info("来自微信");
String redirecturi = HttpUtil.urlEnCode(commonConfig.getDomain() + wechatPay + ReqInfo);
logger.info("REDIRECT_URI="+redirecturi);
SysPayChannel channel = payChannelService.selectByChannelType(PayTypeConstant.Wechat);
WXPublicConfig publicConfig = new WXPublicConfig();
publicConfig.setAppId(channel.getAppid());
publicConfig.setOriginId(channel.getOriginid());
publicConfig.setAppSecret(channel.getAppsecret());
publicConfig.setEncodingAESKey(channel.getEncodingaeskey());
// 授权页面地址
String requestUrl = publicConfig.getAuthorizeinterface();
requestUrl = requestUrl.replace("APPID", publicConfig.getAppId()).replace("REDIRECT_URI", redirecturi).replace("SCOPE", publicConfig.getScope()).replace("STATE", publicConfig.getState());
// 重定向到授权页面
response.sendRedirect(requestUrl);
} else {
logger.info("未知来源");
}
logger.info("####################请求结束####################");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
WechatPayServlet 在获取到Redis中预订单数据后,创建真实订单并调用微信“统一下单接口”;
package com.platform.cloudlottery.servlet;
import com.alibaba.fastjson.JSONObject;
import com.github.wxpay.sdk.WXPayUtil;
import com.platform.cloudlottery.common.CommonConfig;
import com.platform.cloudlottery.common.jedis.JedisUtil;
import com.platform.cloudlottery.common.lang.StringUtils;
import com.platform.cloudlottery.common.utils.BusinessCodeUtils;
import com.platform.cloudlottery.common.wechat.bean.WeiXinOAuth2Token;
import com.platform.cloudlottery.common.wechat.bean.WeiXinUserInfo;
import com.platform.cloudlottery.common.wechat.config.WXPayConfig;
import com.platform.cloudlottery.common.wechat.config.WXPublicConfig;
import com.platform.cloudlottery.common.wechat.util.WeiXinOAuth2Util;
import com.platform.cloudlottery.common.wechat.util.WeiXinPayUtils;
import com.platform.cloudlottery.model.SysPayChannel;
import com.platform.cloudlottery.service.Impl.LotteryOrderServiceImpl;
import com.platform.cloudlottery.service.Impl.SysPayChannelServiceImpl;
import com.platform.cloudlottery.service.Impl.UserMemberServiceImpl;
import com.platform.cloudlottery.service.OrderServcie;
import com.platform.cloudlottery.service.UserInfoService;
import com.platform.cloudlottery.web.ResultContant

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



