提交 | 用户 | age
|
a6a76f
|
1 |
<%@ page language="java" contentType="text/html; charset=UTF-8" |
F |
2 |
pageEncoding="UTF-8"%> |
|
3 |
<%@page import="com.yc.multiData.SpObserver"%> |
|
4 |
<%@page import="com.yc.utils.SessionKey"%> |
|
5 |
<%@page import="com.github.binarywang.wxpay.exception.WxPayException"%> |
|
6 |
<%@page import="me.chanjar.weixin.mp.api.WxMpService"%> |
|
7 |
<%@page import="com.yc.factory.FactoryBean"%> |
|
8 |
<%@page import="java.io.IOException"%> |
|
9 |
<%@page import="com.yc.sdk.weixinmp.action.MpServiceInit"%> |
|
10 |
<%@page import="com.yc.sdk.shopping.util.SettingKey"%> |
|
11 |
<%@page import="me.chanjar.weixin.common.bean.WxJsapiSignature"%> |
|
12 |
<%@page import="com.yc.sdk.shopping.service.SettingIfc"%> |
|
13 |
<%@page import="com.yc.sdk.shopping.entity.SettingEntity"%> |
|
14 |
<%@page import="com.yc.sdk.shopping.service.department.DepartmentIfc"%> |
|
15 |
<%@page import="com.yc.sdk.shopping.entity.DepartmentEntity"%> |
|
16 |
<%@page import="org.springframework.dao.DataAccessException"%> |
|
17 |
<%@page import="com.yc.entity.DataSourceEntity"%> |
|
18 |
<%@page import="com.yc.multiData.MultiDataSource"%> |
|
19 |
<%@page import="com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult"%> |
|
20 |
<%@page import="com.github.binarywang.wxpay.config.WxPayConfig"%> |
|
21 |
<%@page import="com.github.binarywang.wxpay.service.WxPayService"%> |
|
22 |
<%@page import="com.github.binarywang.wxpay.service.impl.WxPayServiceImpl"%> |
|
23 |
<%@page import="com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest"%> |
|
24 |
<%@page import="com.yc.sdk.shopping.entity.OrderEntity"%> |
|
25 |
<%@page import="com.yc.sdk.shopping.service.order.OrderIfc"%> |
|
26 |
<%@page import="java.util.Date"%> |
|
27 |
<%@page import="java.util.Calendar"%> |
|
28 |
<%@page import="java.text.SimpleDateFormat"%> |
|
29 |
<%@page import="java.util.Map"%> |
|
30 |
<%@page import="com.yc.sdk.shopping.entity.MemberDocEntity"%> |
|
31 |
<%@page import="com.github.binarywang.wxpay.bean.order.WxPayMpOrderResult"%> |
|
32 |
<%@page import="com.yc.sdk.shopping.service.wxpay.WxPayIfc"%> |
|
33 |
<%@page import="redis.clients.jedis.JedisPool"%> |
|
34 |
<%@page import="com.yc.sdk.weixinopen.entity.OpenComponentAppSetting"%> |
|
35 |
<% |
|
36 |
//String queryString = request.getQueryString(); |
|
37 |
String hostUrl = SettingKey.getHostUrl(request) ; |
|
38 |
//将微信corpid组装成url |
|
39 |
String wxQueryString = SettingKey.getQueryStringByWx(request); |
|
40 |
boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); |
|
41 |
|
|
42 |
//参数设置 |
|
43 |
String cccode = request.getParameter("cccode") ; |
|
44 |
String corpId = request.getParameter(SessionKey.WEIXIN_CORPID) ; |
|
45 |
String wx = request.getParameter(SessionKey.WEIXIN_FROM); |
|
46 |
|
|
47 |
String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String)session.getAttribute(SettingKey.CLTCODE)); |
|
48 |
|
|
49 |
if (cltCode == null || "".equals(cltCode) ) { |
|
50 |
String queryString = request.getQueryString(); |
|
51 |
String redirect = "/shopping/" + (isMoblieBrowser?"mobile/":"") + "account/order.jsp"+(queryString!=null?"?"+queryString:""); |
|
52 |
session.setAttribute(SettingKey.REDIRECT,redirect ); |
|
53 |
try { |
|
54 |
out.print(SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"") + "account/login.jsp" + (wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString) )); |
|
55 |
} catch (IOException e) { |
|
56 |
// |
|
57 |
} |
|
58 |
return ; |
|
59 |
}else { |
|
60 |
session.removeAttribute(SettingKey.REDIRECT); |
|
61 |
} |
|
62 |
|
|
63 |
String dbId = (String) session.getAttribute(SessionKey.SHOPPING_DBID); |
|
64 |
SettingEntity settingEntity = null ; |
|
65 |
|
|
66 |
DataSourceEntity mpEntity = null; |
|
67 |
if (wx!=null&& !"".equals(wx) && corpId != null && !"".equals(corpId)) { |
|
68 |
if (wx.equals("1")) { |
|
69 |
mpEntity = MultiDataSource.getDataSourceMapByCorpId(corpId) ; |
|
70 |
}else { |
|
71 |
mpEntity = MultiDataSource.getDataSourceMapByMpAppId(corpId) ; |
|
72 |
} |
|
73 |
}else { |
|
74 |
mpEntity = MultiDataSource.getDataSourceMap(dbId) ; //获取CorpId连接参数 |
|
75 |
} |
|
76 |
|
|
77 |
if (mpEntity == null|| "".equals(mpEntity.getMpSecret())) { |
|
78 |
System.out.println("未找到微信公众号的AppId的参数,请在数据源("+dbId+")中设置好"); |
|
79 |
try { |
|
80 |
out.println("未找到微信公众号的AppId的参数,请在数据源("+dbId+")中设置好"); |
|
81 |
} catch (IOException e) { |
|
82 |
e.printStackTrace(); |
|
83 |
}catch (Exception e) { |
|
84 |
e.printStackTrace(); |
|
85 |
} |
|
86 |
return ; |
|
87 |
} |
|
88 |
|
|
89 |
if (mpEntity.getMpMchId() == null||mpEntity.getMpMchId().equals("") |
|
90 |
|| mpEntity.getMpMchKey() == null || "".equals(mpEntity.getMpMchKey())) { |
|
91 |
out.println("请在数据源中设置微信支付【商户号】和【API密钥】信息,同时上传【API证书】到服务器!"); |
|
92 |
return; |
|
93 |
} |
|
94 |
|
|
95 |
String url = hostUrl; |
|
96 |
url+=request.getRequestURI(); |
|
97 |
String queryString = request.getQueryString(); |
|
98 |
if (queryString !=null && !"".equals(queryString)) { |
|
99 |
url += "?"+queryString ; |
|
100 |
} |
|
101 |
|
|
102 |
WxMpService wxMpService = MpServiceInit.getWxMpServiceByOpenService(mpEntity.getMpAppId()); |
|
103 |
|
|
104 |
//WxMpService wxMpService = MpServiceInit.getWxMpService(mpEntity,jedisPool); |
|
105 |
WxJsapiSignature wxJsapiSignature = wxMpService.createJsapiSignature(url); |
|
106 |
if (wxJsapiSignature == null) { |
|
107 |
out.println("获取微信公众号jsapi签名失败,请检查数据源中的微信公众号参数设置!"); |
|
108 |
return; |
|
109 |
} |
|
110 |
|
|
111 |
Date timeStart = new Date() ; |
|
112 |
Calendar timeExpire=Calendar.getInstance(); |
|
113 |
timeExpire.setTime(new Date()); |
|
114 |
timeExpire.set(Calendar.HOUR,timeExpire.get(Calendar.HOUR)+2);//让小时加2 |
|
115 |
SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmss"); |
|
116 |
|
|
117 |
String docCode = (request.getParameter(SettingKey.DOCCODE) == null ? "":(String)request.getParameter(SettingKey.DOCCODE)); |
|
118 |
String REMOTE_ADDRS = SettingKey.getIpAddr(request) ; // request.getRemoteAddr(); |
|
119 |
String REMOTE_ADDR[] = REMOTE_ADDRS.split(","); |
|
120 |
try { |
|
121 |
SpObserver.setDBtoInstance("_"+dbId);//切换数据源 |
|
122 |
//参数设置 |
|
123 |
SettingIfc settingIfc = (SettingIfc)FactoryBean.getBean("SettingImpl"); |
8369ed
|
124 |
settingEntity = settingIfc.getSettingEntity(request) ; |
a6a76f
|
125 |
|
F |
126 |
if (settingEntity == null) { |
|
127 |
out.println("未找到【维护导购系统设置】参数,请在 714001 功能号维护"); |
|
128 |
return ; |
|
129 |
} |
|
130 |
|
|
131 |
if (settingEntity.getWxPayAcctCode() == null || "".equals(settingEntity.getWxPayAcctCode())) { |
|
132 |
out.println("请在 714001【维护导购系统设置】功能号中预先维护【微信支付银行账户】参数"); |
|
133 |
return ; |
|
134 |
} |
|
135 |
|
|
136 |
String openid = (String)session.getAttribute(SessionKey.WEIXIN_OPENID); |
|
137 |
String moneyStr=request.getParameter("money")==null?"0":request.getParameter("money"); |
|
138 |
int money=(int)(Double.parseDouble(moneyStr)*100.00); |
|
139 |
|
|
140 |
|
|
141 |
|
|
142 |
//WxPayService wxPayService = (WxPayService)FactoryBean.getBean("WxPayServiceImpl"); |
|
143 |
WxPayServiceImpl wxPayService = new WxPayServiceImpl() ; |
|
144 |
|
|
145 |
String notifyUrl = mpEntity.getCorpURL()+ SettingKey.WXPAY_RECHARGE_NOTICE_URL ; |
|
146 |
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = WxPayUnifiedOrderRequest.newBuilder() |
|
147 |
.deviceInfo("WEB") |
|
148 |
.body(mpEntity.getMpMchName()) |
|
149 |
.outTradeNo(docCode).detail("") |
|
150 |
.feeType("CNY").totalFee(money) |
|
151 |
.spbillCreateIp(REMOTE_ADDR[0]) |
|
152 |
.timeStart(df.format(timeStart)) |
|
153 |
.timeExpire(df.format(timeExpire.getTime())) |
|
154 |
.notifyUrl(notifyUrl).openid(openid) |
|
155 |
.tradeType("JSAPI").build(); |
|
156 |
|
|
157 |
WxPayConfig payConfig = new WxPayConfig() ; |
|
158 |
payConfig.setAppId(mpEntity.getMpAppId()); |
|
159 |
payConfig.setMchId(mpEntity.getMpMchId()) ; |
|
160 |
payConfig.setNotifyUrl(notifyUrl) ; |
|
161 |
payConfig.setTradeType("JSAPI"); |
|
162 |
payConfig.setMchKey(mpEntity.getMpMchKey()) ; |
|
163 |
payConfig.setKeyPath(request.getContextPath()+ SettingKey.getWxPayCertPath(dbId)) ; |
|
164 |
//cjdhHcPekjMaWcmdjBBsPocMdewsePdj |
|
165 |
|
|
166 |
wxPayService.setConfig(payConfig); |
|
167 |
|
|
168 |
WxPayUnifiedOrderResult wxPayUnifiedOrderResult = wxPayService.unifiedOrder(wxPayUnifiedOrderRequest); |
|
169 |
WxPayMpOrderResult wxPayMpOrderResult = wxPayService.createOrder(wxPayUnifiedOrderRequest) ; |
|
170 |
%> |
4a551f
|
171 |
<!DOCTYPE html > |
a6a76f
|
172 |
<html> |
F |
173 |
<head> |
|
174 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
|
175 |
<meta http-equiv="X-UA-Compatible" content="chrome=1"> |
|
176 |
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"> |
|
177 |
<script src="<%=hostUrl%>/shopping/view/javascript/jquery/jquery-2.1.1.min.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/shopping/view/javascript/jquery/jquery-2.1.1.min.js")%>" type="text/javascript"></script> |
|
178 |
<link href="<%=hostUrl%>/shopping/view/javascript/bootstrap/css/bootstrap.min.css?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/shopping/view/javascript/bootstrap/css/bootstrap.min.css")%>" rel="stylesheet" media="screen" /> |
|
179 |
<script src="<%=hostUrl%>/shopping/view/javascript/bootstrap/js/bootstrap.min.js?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/shopping/view/javascript/bootstrap/js/bootstrap.min.js")%>" type="text/javascript"></script> |
|
180 |
<link href="<%=hostUrl%>/shopping/view/javascript/font-awesome/css/font-awesome.min.css?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/shopping/view/javascript/font-awesome/css/font-awesome.min.css")%>" rel="stylesheet" type="text/css" /> |
|
181 |
|
|
182 |
<link href="<%=hostUrl%>/shopping/view/theme/default/stylesheet/googleapisFont.css?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/shopping/view/theme/default/stylesheet/googleapisFont.css")%>" rel="stylesheet" type="text/css" /> |
|
183 |
<link href="<%=hostUrl%>/shopping/view/theme/default/stylesheet/stylesheet.css?v=<%=com.yc.utils.FileUtil.getVerstion(request,"/shopping/view/theme/default/stylesheet/stylesheet.css")%>" rel="stylesheet"> |
|
184 |
|
|
185 |
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> |
|
186 |
<title>微信支付</title> |
|
187 |
</head> |
|
188 |
<body> |
|
189 |
|
|
190 |
<style type="text/css"> |
|
191 |
.col-center-block { |
|
192 |
float: none; |
|
193 |
display: block; |
|
194 |
margin-left: auto; |
|
195 |
margin-right: auto; |
|
196 |
} |
|
197 |
.hint{ margin:0 auto; height:80px; border:0px solid #F00;text-align: center;} |
|
198 |
.lifontsize{height:20px;font-size:18px} |
|
199 |
</style> |
|
200 |
<div class="container"> |
|
201 |
<div class="row"> |
|
202 |
|
|
203 |
</div> |
|
204 |
|
|
205 |
|
|
206 |
<div class="row"> |
|
207 |
<div class="hint"><br/><br/> |
|
208 |
<button id="button-submit" class="btn btn-primary" onclick="javascript:callpay()" style="font-size:22px;width:390px;" ><i class="fa fa-weixin" aria-hidden="true" style="font-size:30px;"></i> 确认支付:<%=moneyStr %> |
|
209 |
</button> |
|
210 |
</div> |
|
211 |
</div> |
|
212 |
</div> |
|
213 |
|
|
214 |
<script type="text/javascript"> |
|
215 |
function onBridgeReady(){ |
|
216 |
WeixinJSBridge.invoke( |
|
217 |
'getBrandWCPayRequest', { |
|
218 |
"appId":"<%= wxPayMpOrderResult.getAppId() %>", //公众号名称,由商户传入 |
|
219 |
"timeStamp":"<%= wxPayMpOrderResult.getTimeStamp() %>", //时间戳,自1970年以来的秒数 |
|
220 |
"nonceStr":"<%= wxPayMpOrderResult.getNonceStr() %>", //随机串 |
|
221 |
"package":"<%= wxPayMpOrderResult.getPackageValue() %>", //"prepay_id=u802345jgfjsdfgsdg888", |
|
222 |
"signType":"<%= wxPayMpOrderResult.getSignType() %>", //微信签名方式: |
|
223 |
"paySign":"<%=wxPayMpOrderResult.getPaySign() %>" //微信签名 |
|
224 |
}, |
|
225 |
function(res){ |
|
226 |
WeixinJSBridge.log(res.err_msg); |
|
227 |
//alert(res.err_code+res.err_desc+res.err_msg); |
|
228 |
if(res.err_msg == "get_brand_wcpay_request:ok" ) { // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。 |
|
229 |
location = "<%=hostUrl %>/shopping/pay/wxpayrechargesuccess.jsp?<%= SettingKey.DOCCODE %>=<%=docCode %><%= (wxQueryString == null||"".equals(wxQueryString)?"":"&" + wxQueryString) %>"; |
|
230 |
} |
|
231 |
} |
|
232 |
); |
|
233 |
} |
|
234 |
|
|
235 |
function callpay() |
|
236 |
{ |
|
237 |
if (typeof WeixinJSBridge == "undefined"){ |
|
238 |
if( document.addEventListener ){ |
|
239 |
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); |
|
240 |
}else if (document.attachEvent){ |
|
241 |
document.attachEvent('WeixinJSBridgeReady', onBridgeReady); |
|
242 |
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); |
|
243 |
} |
|
244 |
}else{ |
|
245 |
onBridgeReady(); |
|
246 |
} |
|
247 |
} |
|
248 |
</script> |
|
249 |
<% |
|
250 |
//设置微信分享 |
|
251 |
//微信js api 列表 |
|
252 |
request.setAttribute(SettingKey.JSAPILIST,new String[]{"onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","previewImage"}); |
|
253 |
//图片缩放 |
|
254 |
//request.setAttribute(SettingKey.WXPREVIEWIMAGES,new String[]{".table img"}) ; |
|
255 |
%> |
|
256 |
<jsp:include page="/shopping/mobile/account/sharewidget.jsp" flush="true" /> |
|
257 |
|
|
258 |
</body> |
|
259 |
</html> |
|
260 |
<% |
|
261 |
}catch(DataAccessException e ) { |
|
262 |
e.printStackTrace(); |
|
263 |
out.println(SettingKey.getJsHint(e.getCause().getMessage())); |
|
264 |
}catch (WxPayException e) { |
|
265 |
if ("ORDERPAID".equalsIgnoreCase(e.getErrCode())) { |
|
266 |
out.println("<script>alert(\"" + e.getErrCodeDes() + "\");location = \""+mpEntity.getCorpURL() +"/shopping/pay/wxpayrechargesuccess.jsp?"+ SettingKey.DOCCODE +"="+ docCode + (wxQueryString == null||"".equals(wxQueryString)?"":"&" + wxQueryString) +"\";</script>"); |
|
267 |
}else { |
|
268 |
e.printStackTrace(); |
|
269 |
out.println(SettingKey.getJsHint("微信错误代码:" + e.getErrCode()+",错误信息:"+e.getErrCodeDes())); |
|
270 |
} |
|
271 |
return ; |
|
272 |
}catch(Exception e ) { |
|
273 |
e.printStackTrace(); |
|
274 |
out.println(SettingKey.getJsHint(e.getMessage())); |
|
275 |
}finally { |
|
276 |
SpObserver.setDBtoInstance(); |
|
277 |
} |
|
278 |
%> |