微信、支付宝二码合一扫码支付实现思路

一、支付二维码(预订单)

根据需要购买的信息创建预订单,将订单信息保存到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;
import com.platform.cloudlottery.web.StatusContant.PayTypeConstant;
import com.platform.cloudlottery.web.SysKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import redis.clients.jedis.Jedis;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
 
/**
* @ClassName: WechatPayServlet
* @Description: TODO(这里用一句话描述这个类的作用)
* @author chenkun
* @date 2019年1月5日
*
 */
public class WechatPayServlet extends HttpServlet {
 private static final long serialVersionUID = -8457626626670970403L;
 protected Logger logger = LoggerFactory.getLogger(getClass());
 
 private static Jedis redis = JedisUtil.getJedis();
 
 @Value("${config.domain}")
 private String domain;
 
 @Value("${config.isProduction}")
 private boolean isProduction;
 
 // 请求路径包含的字符串
 private static final String UrlStr = "wechatPay/";
 
 @Autowired
 private SysPayChannelServiceImpl payChannelService;
 
 @Autowired
 private UserMemberServiceImpl memberService;
 
 @Autowired
 private LotteryOrderServiceImpl lotteryOrderService;
 
 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.debug("####################请求开始####################");
 request.setCharacterEncoding("utf-8");
 response.setCharacterEncoding("utf-8");
 try {
 // 用户同意授权后,能获取到code
 String code = request.getParameter("code");
 // 用户同意授权
 if (!"authdeny".equals(code)) {
 CommonConfig commonConfig = new CommonConfig();
 String RequestURL = request.getRequestURL().toString();
 logger.debug("URL : " + RequestURL);
 String QRCodeUrl = RequestURL.substring(RequestURL.indexOf(UrlStr) + UrlStr.length());
 String QRCodeReqInfo = QRCodeUrl.split("&")[0];
 String operatorId = QRCodeUrl.split("&")[1];
 logger.debug("QRCodeReqInfo : " + QRCodeReqInfo +";operatorId : " + operatorId);
 String advancekey = commonConfig.getLotteryorder() + QRCodeReqInfo;
 
 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());
 WXPayConfig payConfig = new WXPayConfig();
 payConfig.setMchId(channel.getMchid());
 payConfig.setAppId(channel.getAppid());
 payConfig.setKey(channel.getWxkey());
 payConfig.setApicertPath(channel.getPayCertUrl());
 payConfig.setSpbillCreateIp(channel.getSpbillcreateip());
 // 获取网页授权access_token
 WeiXinOAuth2Token weixinOauth2Token = WeiXinOAuth2Util.getOAuth2AccessToken(publicConfig,code);
 // 网页授权接口访问凭证
 String accessToken = weixinOauth2Token.getAccessToken();
 logger.debug("accessToken=" + accessToken);
 // 用户标识
 String openId = weixinOauth2Token.getOpenId();
 logger.debug("openId="+openId);
 // 获取用户信息
 WeiXinUserInfo userInfo = WeiXinOAuth2Util.getOAuth2UserInfo(publicConfig, accessToken, openId);
 logger.debug(userInfo.getNickName()+"=====微信支付====="+userInfo.getOpenId());
 //添加或更新用户信息
 String userid = UserInfoService.CreateUserMember(userInfo,memberService);
 
 if (!redis.exists(advancekey)) {// 判断key是否存在
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 if (StringUtils.trimToEmpty(redis.get(advancekey)).equals("")) {
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 JSONObject jsonObject = JSONObject.parseObject(redis.get(advancekey));
 if (null == jsonObject) {
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 if (redis.get(advancekey + "_lock") != null && !redis.get(advancekey + "_lock").equals("")){
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 redis.setex(advancekey + "_lock", 1, "lock");
 
 String orderid = BusinessCodeUtils.getOrderNo(jsonObject.getString(SysKey.deviceSn));
 int money = jsonObject.getIntValue(SysKey.money);
 int lotterytype = jsonObject.getIntValue(SysKey.lotteryType);
 if (!orderid.equals("") && money!=0) {
 //创建订单
 boolean bool = OrderServcie.createorder(QRCodeReqInfo, PayTypeConstant.Wechat, payConfig.getAppID(), userid, openId, orderid, jsonObject, lotteryOrderService);
 if (bool) {
 //删除预订单信息
 redis.del(advancekey);//一个预订单只能创建一个订单
 String paymoney = String.valueOf(money);
 if (!isProduction) {//测试环境
 paymoney = BigDecimal.valueOf(Long.valueOf(paymoney)).divide(new BigDecimal(100)).toString();//真实金额除100
 }
 logger.debug("是否生产环境:"+isProduction+";订单金额为:"+String.valueOf(money)+";实际支付金额为:"+paymoney);
 //创建微信订单
 Map<String, String> map = WeiXinPayUtils.createOrderJsapi(domain, payConfig, orderid, paymoney, lotterytype==0?"即开票":"电脑票", openId);
 logger.debug("创建微信支付预订单返回数据:"+JSONObject.toJSONString(map));
 if (map != null) {
 if (map.get("return_code").equals("SUCCESS")) {
 if (map.get("result_code").equals("SUCCESS")) {
 logger.debug("创建微信支付预订单成功");
 Map<String, String> data = new LinkedHashMap<String, String>();
 data.put("appId", payConfig.getAppID());
 data.put("timeStamp", String.valueOf(new Date().getTime()/1000));
 data.put("nonceStr", WXPayUtil.generateNonceStr());
 data.put("package", "prepay_id="+map.get("prepay_id"));
 data.put("signType", "MD5");
 data.put("paySign", WXPayUtil.generateSignature(data, payConfig.getKey()));
 logger.debug("返回到客户端的数据:"+JSONObject.toJSONString(data));
 request.setAttribute("appId", data.get("appId"));
 request.setAttribute("timeStamp", data.get("timeStamp"));
 request.setAttribute("nonceStr", data.get("nonceStr"));
 request.setAttribute("package", data.get("package"));
 request.setAttribute("signType", data.get("signType"));
 request.setAttribute("paySign", data.get("paySign"));
 
 request.setAttribute("code", ResultContant.sucess);
 request.setAttribute("message", "成功");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }else{
 logger.debug("创建订单失败:创建支付预订单失败");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }
 } else {
 logger.debug("创建订单失败:创建支付预订单失败");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }
 } else {
 logger.debug("创建订单失败:创建支付预订单失败");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }
 } else {
 logger.debug("创建订单失败:创建支付预订单失败");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }
 } else {
 logger.debug("创建订单失败;订单金额或者订单号数据有误");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }
 }
 } catch (Exception e) {
 e.printStackTrace();
 logger.debug("系统异常");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../wechat/WechatPay.jsp").forward(request, response);
 }
 logger.debug("####################请求结束####################");
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 doGet(request, response);
 }
}

AliPayServlet 在获取到Redis中预订单数据后,创建真实订单并调用支付宝“手机网站支付接口”;

package com.platform.cloudlottery.servlet;
 
import com.alibaba.fastjson.JSONObject;
import com.platform.cloudlottery.common.CommonConfig;
import com.platform.cloudlottery.common.alipay.bean.AliPayOAuth2Token;
import com.platform.cloudlottery.common.alipay.bean.AliPayUserInfo;
import com.platform.cloudlottery.common.alipay.config.MyAliPayConfig;
import com.platform.cloudlottery.common.alipay.uitl.AliPayOAuth2Util;
import com.platform.cloudlottery.common.alipay.uitl.AlipayPayUtils;
import com.platform.cloudlottery.common.jedis.JedisUtil;
import com.platform.cloudlottery.common.lang.StringUtils;
import com.platform.cloudlottery.common.properties.PropertiesUtils;
import com.platform.cloudlottery.common.utils.BusinessCodeUtils;
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;
import com.platform.cloudlottery.web.StatusContant.PayTypeConstant;
import com.platform.cloudlottery.web.SysKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import redis.clients.jedis.Jedis;
 
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.Properties;
 
/**
* @ClassName: AliPayServlet
* @Description: TODO(这里用一句话描述这个类的作用)
* @author chenkun
* @date 2019年1月5日
*
 */
public class AliPayServlet extends HttpServlet {
 private static final long serialVersionUID = -8457626626670970403L;
 protected Logger logger = LoggerFactory.getLogger(getClass());
 
 private static Jedis redis = JedisUtil.getJedis();
 
 @Value("${config.domain}")
 private String domain;
 
 @Value("${config.isProduction}")
 private boolean isProduction;
 
 // 请求路径包含的字符串
 private static final String UrlStr = "aliPay/";
 
 @Autowired
 private SysPayChannelServiceImpl payChannelService;
 
 @Autowired
 private UserMemberServiceImpl memberService;
 
 @Autowired
 private LotteryOrderServiceImpl lotteryOrderService;
 
 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.debug("####################请求开始####################");
 request.setCharacterEncoding("utf-8");
 response.setCharacterEncoding("utf-8");
 try {
 //用户同意授权后,能获取到code
 String code = request.getParameter("auth_code");
 //用户同意授权
 if (!code.equals("")) {
 CommonConfig commonConfig = new CommonConfig();
 //具体业务
 String RequestURL = request.getRequestURL().toString();
 logger.debug("URL : " + RequestURL);
 String QRCodeUrl = RequestURL.substring(RequestURL.indexOf(UrlStr) + UrlStr.length());
 String QRCodeReqInfo = QRCodeUrl.split("&")[0];
 String operatorId = QRCodeUrl.split("&")[1];
 logger.debug("QRCodeReqInfo : " + QRCodeReqInfo +";operatorId : " + operatorId);
 String advancekey = commonConfig.getLotteryorder() + QRCodeReqInfo;
 
 SysPayChannel channel = payChannelService.selectByChannelType(PayTypeConstant.Alipay);
 MyAliPayConfig aliPayConfig = new MyAliPayConfig();
 aliPayConfig.setAppId(channel.getAppid());
 String certsrc = channel.getPayCertUrl();
 Properties propertiesFile = PropertiesUtils.getPropertiesFile(certsrc);
 if (propertiesFile != null) {
 aliPayConfig.setPayeeAccount(propertiesFile.getProperty("ALI_PAYEE_ACCOUNT"));
 aliPayConfig.setAppId(propertiesFile.getProperty("ALI_APP_ID"));
 aliPayConfig.setAliPayPublicKey(propertiesFile.getProperty("ALI_ALIPAY_PUBLIC_KEY"));
 aliPayConfig.setAppPayPublicKey(propertiesFile.getProperty("ALI_APP_PAY_PUBLIC_KEY"));
 aliPayConfig.setAppPrivateKey(propertiesFile.getProperty("ALI_APP_PRIVATE_KEY"));
 }
 //获取网页授权access_token
 AliPayOAuth2Token aliPayOAuth2Token = AliPayOAuth2Util.getOAuth2AccessToken(aliPayConfig,code);
 //网页授权接口访问凭证
 String accessToken = aliPayOAuth2Token.getAccessToken();
 logger.debug("accessToken=" + accessToken);
 //用户标识
 String aliuserid = aliPayOAuth2Token.getUserid();
 logger.debug("aliuserid="+aliuserid);
 //获取用户信息
 AliPayUserInfo userInfo = AliPayOAuth2Util.getOAuth2UserInfo(aliPayConfig,accessToken,aliuserid);
 logger.debug(userInfo.getNickName()+"=====支付宝支付====="+userInfo.getUserId());
 //添加或更新用户信息
 String userid = UserInfoService.CreateUserMember(userInfo,memberService);
 
 if (!redis.exists(advancekey)) {// 判断key是否存在
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 if (StringUtils.trimToEmpty(redis.get(advancekey)).equals("")) {
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 JSONObject jsonObject = JSONObject.parseObject(redis.get(advancekey));
 if (null == jsonObject) {
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 if (redis.get(advancekey + "_lock") != null && !redis.get(advancekey + "_lock").equals("")){
 logger.debug("二维码失效");
 request.setAttribute("code", ResultContant.notuserdqrcode);
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 logger.debug("####################请求结束####################");
 return;
 }
 
 redis.setex(advancekey + "_lock", 1, "lock");
 
 String orderid = BusinessCodeUtils.getOrderNo(jsonObject.getString(SysKey.deviceSn));
 int money = jsonObject.getIntValue(SysKey.money);
 int lotterytype = jsonObject.getIntValue(SysKey.lotteryType);
 if (!orderid.equals("") && money != 0) {
 //创建订单
 boolean bool = OrderServcie.createorder(QRCodeReqInfo, PayTypeConstant.Alipay, aliPayConfig.getAppId(), userid, aliuserid, orderid, jsonObject, lotteryOrderService);
 if (bool) {
 //删除预订单信息
 redis.del(advancekey);//一个预订单只能创建一个订单
 String paymoney = BigDecimal.valueOf(Long.valueOf(money)).divide(new BigDecimal(100)).toString();
 if (!isProduction) {//测试环境
 paymoney = BigDecimal.valueOf(Long.valueOf(paymoney)).divide(new BigDecimal(100)).toString();//真实金额除100
 }
 logger.debug("是否生产环境:"+isProduction+";订单金额为:"+BigDecimal.valueOf(Long.valueOf(money)).divide(new BigDecimal(100)).toString()+";实际支付金额为:"+paymoney);
 //创建支付宝订单
 String responsestr = AlipayPayUtils.createOrderWapPay(domain, aliPayConfig, orderid, lotterytype==0?"即开票":"电脑票", paymoney, "");
 logger.debug("创建支付宝支付预订单返回数据:"+responsestr);
 if (!responsestr.equals("")) {
 response.setContentType("text/html;charset=UTF-8");
 response.getWriter().write(responsestr);//直接将完整的表单html输出到页面
 response.getWriter().flush();
 response.getWriter().close();
 response.getWriter().append("Served at: ").append(request.getContextPath());
 } else {
 logger.debug("创建订单失败:创建支付预订单失败");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 }
 } else {
 logger.debug("创建订单失败:创建支付预订单失败");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 }
 } else {
 logger.debug("创建订单失败;订单金额或者订单号数据有误");
 request.setAttribute("code", ResultContant.createordererror);
 request.setAttribute("message", "创建订单失败");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 }
 }
 } catch (Exception e) {
 e.printStackTrace();
 logger.debug("系统异常");
 request.setAttribute("code", "二维码失效");
 request.setAttribute("message", "二维码失效");
 request.getRequestDispatcher("../alipay/AliPay.jsp").forward(request, response);
 }
 logger.debug("####################请求结束####################");
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 doGet(request, response);
 }
}
三、创建微信支付结果回调接口和支付宝支付接口回调接口,用于接收微信或者支付宝的支付结果通知;

原文发布于微信公众号 - Java编程指南(JavaXxzyfx)

原文发表时间:2019-08-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券