前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >微信、支付宝二码合一扫码支付实现思路

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

作者头像
Java编程指南
发布2019-08-16 10:39:22
3.1K0
发布2019-08-16 10:39:22
举报
文章被收录于专栏:Java编程指南Java编程指南

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

根据需要购买的信息创建预订单,将订单信息保存到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 用于用户使用微信或者支付宝扫码二维码进行客户端识别及重定向到对应的业务处理;

代码语言:javascript
复制
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中预订单数据后,创建真实订单并调用微信“统一下单接口”;

代码语言:javascript
复制
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中预订单数据后,创建真实订单并调用支付宝“手机网站支付接口”;

代码语言:javascript
复制
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);
 }
}
代码语言:javascript
复制
三、创建微信支付结果回调接口和支付宝支付接口回调接口,用于接收微信或者支付宝的支付结果通知;
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java编程指南 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档