提交 | 用户 | 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.github.binarywang.wxpay.bean.order.WxPayMpOrderResult"%> |
|
31 |
<%@page import="redis.clients.jedis.JedisPool"%> |
|
32 |
<%@page import="com.yc.sdk.weixinopen.entity.OpenComponentAppSetting"%> |
|
33 |
<% |
|
34 |
//String queryString = request.getQueryString(); |
|
35 |
String hostUrl = SettingKey.getHostUrl(request) ; |
|
36 |
//将微信corpid组装成url |
|
37 |
String wxQueryString = SettingKey.getQueryStringByWx(request); |
|
38 |
boolean isMoblieBrowser = SettingKey.isMoblieBrowser(request); |
|
39 |
|
|
40 |
//参数设置 |
|
41 |
//String cccode = request.getParameter("cccode") ; |
|
42 |
String corpId = request.getParameter(SessionKey.WEIXIN_CORPID) ; |
|
43 |
String wx = request.getParameter(SessionKey.WEIXIN_FROM); |
|
44 |
|
|
45 |
String cltCode = (session.getAttribute(SettingKey.CLTCODE) == null ? "" : (String)session.getAttribute(SettingKey.CLTCODE)); |
|
46 |
|
|
47 |
if (cltCode == null || "".equals(cltCode) ) { |
|
48 |
String queryString = request.getQueryString(); |
|
49 |
String redirect = "/shopping/" + (isMoblieBrowser?"mobile/":"") + "account/order.jsp"+(queryString!=null?"?"+queryString:""); |
|
50 |
session.setAttribute(SettingKey.REDIRECT,redirect ); |
|
51 |
try { |
|
52 |
out.print(SettingKey.getRedirectUrl(hostUrl + "/shopping/" + (isMoblieBrowser?"mobile/":"") + "account/login.jsp" + (wxQueryString == null||"".equals(wxQueryString)?"":"?" + wxQueryString) )); |
|
53 |
} catch (IOException e) { |
|
54 |
// |
|
55 |
} |
|
56 |
return ; |
|
57 |
}else { |
|
58 |
session.removeAttribute(SettingKey.REDIRECT); |
|
59 |
} |
|
60 |
|
|
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 |
|
|
103 |
WxMpService wxMpService = MpServiceInit.getWxMpServiceByOpenService(mpEntity.getMpAppId()); |
|
104 |
|
|
105 |
//WxMpService wxMpService = MpServiceInit.getWxMpService(mpEntity,jedisPool); |
|
106 |
try { |
|
107 |
WxJsapiSignature wxJsapiSignature = wxMpService.createJsapiSignature(url); |
|
108 |
if (wxJsapiSignature == null) { |
|
109 |
out.println("获取微信公众号jsapi签名失败,请检查数据源中的微信公众号参数设置!"); |
|
110 |
return; |
|
111 |
} |
|
112 |
}catch (me.chanjar.weixin.common.error.WxErrorException e) { |
|
113 |
e.printStackTrace(); |
|
114 |
out.println("微信错误编号:"+e.getError().getErrorCode() +",微信错误提示:" + e.getError().getErrorMsg()); |
|
115 |
return; |
|
116 |
} |
|
117 |
|
|
118 |
WxJsapiSignature wxJsapiSignature = wxMpService.createJsapiSignature(url); |
|
119 |
if (wxJsapiSignature == null) { |
|
120 |
out.println("获取微信公众号jsapi签名失败,请检查数据源中的微信公众号参数设置!"); |
|
121 |
return; |
|
122 |
} |
|
123 |
|
|
124 |
Date timeStart = new Date() ; |
|
125 |
Calendar timeExpire=Calendar.getInstance(); |
|
126 |
timeExpire.setTime(new Date()); |
|
127 |
timeExpire.set(Calendar.HOUR,timeExpire.get(Calendar.HOUR)+2);//让小时加2 |
|
128 |
SimpleDateFormat df=new SimpleDateFormat("yyyyMMddHHmmss"); |
|
129 |
|
|
130 |
String docCode = (request.getParameter(SettingKey.DOCCODE) == null ? "":(String)request.getParameter(SettingKey.DOCCODE)); |
|
131 |
String formId = (request.getParameter(SettingKey.FORMID) == null ? "":(String)request.getParameter(SettingKey.FORMID)); |
|
132 |
|
|
133 |
String REMOTE_ADDRS = SettingKey.getIpAddr(request) ; // request.getRemoteAddr(); |
|
134 |
String REMOTE_ADDR[] = REMOTE_ADDRS.split(","); |
|
135 |
OrderIfc orderIfc = (OrderIfc)FactoryBean.getBean("OrderImpl"); |
|
136 |
|
|
137 |
OrderEntity orderEntity = null ; //订单头信息 |
|
138 |
try { |
|
139 |
SpObserver.setDBtoInstance("_"+dbId);//切换数据源 |
|
140 |
//参数设置 |
|
141 |
SettingIfc settingIfc = (SettingIfc)FactoryBean.getBean("SettingImpl"); |
8369ed
|
142 |
settingEntity = settingIfc.getSettingEntity(request) ; |
a6a76f
|
143 |
|
F |
144 |
if (settingEntity == null) { |
|
145 |
out.println("未找到【维护导购系统设置】参数,请在 714001 功能号维护"); |
|
146 |
return ; |
|
147 |
} |
|
148 |
|
|
149 |
if (settingEntity.getWxPayAcctCode() == null || "".equals(settingEntity.getWxPayAcctCode())) { |
|
150 |
out.println("请在 714001【维护导购系统设置】功能号中预先维护【微信支付银行账户】参数"); |
|
151 |
return ; |
|
152 |
} |
|
153 |
|
|
154 |
String openid = (String)session.getAttribute(SessionKey.WEIXIN_OPENID); |
|
155 |
|
|
156 |
//订单头信息 |
|
157 |
orderEntity = orderIfc.getOrderHeaderEntity(cltCode,docCode,formId!=null&&!"".equals(formId)?Integer.parseInt(formId):null); |
|
158 |
|
|
159 |
if (orderEntity == null) { |
|
160 |
out.println("【"+docCode+"】订单不存在!"); |
|
161 |
return; |
|
162 |
} |
|
163 |
|
|
164 |
if (orderEntity.getCurrencyIsoCode() == null || "".equals(orderEntity.getCurrencyIsoCode())) { |
|
165 |
out.println("当前订单货币【"+orderEntity.getCurrency()+"】对应的【ISO国际货币代码】不存在,请在 110703 功能号中预先维护!"); |
|
166 |
return; |
|
167 |
} |
|
168 |
|
|
169 |
//WxPayService wxPayService = (WxPayService)FactoryBean.getBean("WxPayServiceImpl"); |
|
170 |
WxPayServiceImpl wxPayService = new WxPayServiceImpl() ; |
|
171 |
WxPayUnifiedOrderResult wxPayUnifiedOrderResult = null ; |
|
172 |
WxPayMpOrderResult wxPayMpOrderResult = null; |
|
173 |
if (orderEntity.getWeiXinPayAmount() != 0.0) { |
|
174 |
String notifyUrl = mpEntity.getCorpURL()+ SettingKey.WXPAY_ORDER_NOTICE_URL ; |
|
175 |
WxPayUnifiedOrderRequest wxPayUnifiedOrderRequest = WxPayUnifiedOrderRequest.newBuilder() |
|
176 |
.deviceInfo("WEB") |
|
177 |
.body(mpEntity.getMpMchName()) |
|
178 |
.outTradeNo(orderEntity.getDocCode()).detail("") |
|
179 |
.feeType(orderEntity.getCurrencyIsoCode()) |
|
180 |
.totalFee( (int)(orderEntity.getWeiXinPayAmount()*100.00) ) |
|
181 |
.spbillCreateIp(REMOTE_ADDR[0]) |
|
182 |
.timeStart(df.format(timeStart)) |
|
183 |
.timeExpire(df.format(timeExpire.getTime())) |
|
184 |
.notifyUrl(notifyUrl).openid(openid) |
|
185 |
.tradeType("JSAPI").build(); |
|
186 |
|
|
187 |
WxPayConfig payConfig = new WxPayConfig() ; |
|
188 |
payConfig.setAppId(mpEntity.getMpAppId()); |
|
189 |
payConfig.setMchId(mpEntity.getMpMchId()) ; |
|
190 |
payConfig.setNotifyUrl(notifyUrl) ; |
|
191 |
payConfig.setTradeType("JSAPI"); |
|
192 |
payConfig.setMchKey(mpEntity.getMpMchKey()) ; |
|
193 |
payConfig.setKeyPath(request.getContextPath()+ SettingKey.getWxPayCertPath(dbId)) ; |
|
194 |
//cjdhHcPekjMaWcmdjBBsPocMdewsePdj |
|
195 |
|
|
196 |
wxPayService.setConfig(payConfig); |
|
197 |
|
|
198 |
wxPayUnifiedOrderResult = wxPayService.unifiedOrder(wxPayUnifiedOrderRequest); |
|
199 |
wxPayMpOrderResult = wxPayService.createOrder(wxPayUnifiedOrderRequest) ; |
|
200 |
} |
|
201 |
%> |
4a551f
|
202 |
<!DOCTYPE html > |
a6a76f
|
203 |
<html> |
F |
204 |
<head> |
|
205 |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> |
|
206 |
<meta http-equiv="X-UA-Compatible" content="chrome=1"> |
|
207 |
<meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width"> |
|
208 |
<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> |
|
209 |
<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" /> |
|
210 |
<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> |
|
211 |
<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" /> |
|
212 |
|
|
213 |
<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" /> |
|
214 |
<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"> |
|
215 |
|
|
216 |
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> |
|
217 |
<title>微信支付</title> |
|
218 |
</head> |
|
219 |
<body> |
|
220 |
|
|
221 |
<style type="text/css"> |
|
222 |
.col-center-block { |
|
223 |
float: none; |
|
224 |
display: block; |
|
225 |
margin-left: auto; |
|
226 |
margin-right: auto; |
|
227 |
} |
|
228 |
.hint{ margin:0 auto; height:80px; border:0px solid #F00;text-align: center;} |
|
229 |
.lifontsize{height:20px;font-size:18px} |
|
230 |
</style> |
|
231 |
<div class="container"> |
|
232 |
<div class="row"> |
|
233 |
|
|
234 |
<div class="hint" style="font-size:44px;color:#F00;"><br/><br/> |
|
235 |
<%= orderEntity.getCurrencySign() %><%= orderEntity.getWeiXinPayAmount() %> |
|
236 |
</div> |
|
237 |
<div class="col-xs-12 col-md-4"> |
|
238 |
<ul class="list-unstyled"> |
|
239 |
<li><hr class="line" /></li> |
|
240 |
<li><div class="lifontsize"><i class="fa fa-map-marker" style="font-size:20px;" aria-hidden="true"></i> <%= (orderEntity.getFullAddress() != null&& !"".equals(orderEntity.getFullAddress())?orderEntity.getFullAddress():orderEntity.getPropertyAddress()) %></div></li> |
|
241 |
<li><hr class="line" /></li> |
|
242 |
<li><div class="lifontsize"><i class="fa fa-user-o" style="font-size:20px;" aria-hidden="true"></i> <%= orderEntity.getCltName() %> <i class="fa fa-phone" style="font-size:20px;" aria-hidden="true"></i> <%= orderEntity.getTel() %></div></li> |
|
243 |
<li><hr class="line" /></li> |
|
244 |
<li><div class="lifontsize"><i class="fa fa-comment" style="font-size:20px;" aria-hidden="true"></i> <%= orderEntity.getHdMemo() %></div></li> |
|
245 |
<li><hr class="line" /></li> |
|
246 |
<li><div class="lifontsize"><i class="fa fa-shopping-cart" style="font-size:20px;" aria-hidden="true"></i> <%= orderEntity.getDocCode() %> |
|
247 |
<%= (new SimpleDateFormat("yyyy-MM-dd")).format( orderEntity.getDocDate()) %> |
|
248 |
<%= orderEntity.getDocStatus()!= null&&orderEntity.getDocStatus().equals(0)?"待支付": orderEntity.getDocStatusName() %> |
|
249 |
</div> |
|
250 |
</li> |
|
251 |
<li><hr class="line" /></li> |
|
252 |
</ul> |
|
253 |
|
|
254 |
</div> |
|
255 |
|
|
256 |
</div> |
|
257 |
|
|
258 |
|
|
259 |
<div class="row"> |
|
260 |
<div class="hint"><br/><br/> |
|
261 |
<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> <% if (orderEntity.getWeiXinPayAmount() != 0.0){ %>确认支付 <%= orderEntity.getCurrencySign() %><%= orderEntity.getWeiXinPayAmount() %><% } else { %>无需支付<% } %> |
|
262 |
</button> |
|
263 |
</div> |
|
264 |
</div> |
|
265 |
</div> |
|
266 |
<% if (orderEntity.getWeiXinPayAmount() != 0.0) { %> |
|
267 |
<script type="text/javascript"> |
|
268 |
function onBridgeReady(){ |
|
269 |
WeixinJSBridge.invoke( |
|
270 |
'getBrandWCPayRequest', { |
|
271 |
"appId":"<%= wxPayMpOrderResult.getAppId() %>", //公众号名称,由商户传入 |
|
272 |
"timeStamp":"<%= wxPayMpOrderResult.getTimeStamp() %>", //时间戳,自1970年以来的秒数 |
|
273 |
"nonceStr":"<%= wxPayMpOrderResult.getNonceStr() %>", //随机串 |
|
274 |
"package":"<%= wxPayMpOrderResult.getPackageValue() %>", //"prepay_id=u802345jgfjsdfgsdg888", |
|
275 |
"signType":"<%= wxPayMpOrderResult.getSignType() %>", //微信签名方式: |
|
276 |
"paySign":"<%=wxPayMpOrderResult.getPaySign() %>" //微信签名 |
|
277 |
}, |
|
278 |
function(res){ |
|
279 |
WeixinJSBridge.log(res.err_msg); |
|
280 |
//alert(res.err_code+";"+res.err_desc+";"+res.err_msg); |
|
281 |
if(res.err_msg.indexOf("get_brand_wcpay_request:ok") >= 0 ) { // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。 |
|
282 |
//alert('aaa') ; |
|
283 |
var locUrl = "<%=hostUrl %>/shopping/pay/wxpaysuccess.jsp?<%= SettingKey.FORMID %>=<%=orderEntity.getFormId() %>&<%= SettingKey.DOCCODE %>=<%=orderEntity.getDocCode() %><%= (wxQueryString == null||"".equals(wxQueryString)?"":"&" + wxQueryString) %>"; |
|
284 |
//alert(locUrl); |
|
285 |
location = locUrl; |
|
286 |
} |
|
287 |
} |
|
288 |
); |
|
289 |
} |
|
290 |
function callpay() |
|
291 |
{ |
|
292 |
if (typeof WeixinJSBridge == "undefined"){ |
|
293 |
if( document.addEventListener ){ |
|
294 |
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); |
|
295 |
}else if (document.attachEvent){ |
|
296 |
document.attachEvent('WeixinJSBridgeReady', onBridgeReady); |
|
297 |
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); |
|
298 |
} |
|
299 |
}else{ |
|
300 |
onBridgeReady(); |
|
301 |
} |
|
302 |
} |
|
303 |
</script> |
|
304 |
<% } %> |
|
305 |
|
|
306 |
<% |
|
307 |
//设置微信分享 |
|
308 |
//微信js api 列表 |
|
309 |
request.setAttribute(SettingKey.JSAPILIST,new String[]{"onMenuShareTimeline","onMenuShareAppMessage","onMenuShareQQ","onMenuShareQZone","previewImage"}); |
|
310 |
//图片缩放 |
|
311 |
//request.setAttribute(SettingKey.WXPREVIEWIMAGES,new String[]{".table img"}) ; |
|
312 |
%> |
|
313 |
<jsp:include page="/shopping/mobile/account/sharewidget.jsp" flush="true" /> |
|
314 |
|
|
315 |
</body> |
|
316 |
</html> |
|
317 |
<% |
|
318 |
}catch(DataAccessException e ) { |
|
319 |
e.printStackTrace(); |
|
320 |
out.println(SettingKey.getJsHint(e.getCause().getMessage())); |
|
321 |
}catch (WxPayException e) { |
|
322 |
if ("ORDERPAID".equalsIgnoreCase(e.getErrCode())) { |
|
323 |
out.println("<script>alert(\"" + e.getErrCodeDes() + "\");location = \""+mpEntity.getCorpURL() +"/shopping/pay/wxpaysuccess.jsp?"+ SettingKey.FORMID + "=" + orderEntity.getFormId() +"&"+ SettingKey.DOCCODE +"="+ orderEntity.getDocCode() + (wxQueryString == null||"".equals(wxQueryString)?"":"&" + wxQueryString) +"\";</script>"); |
|
324 |
}else { |
|
325 |
e.printStackTrace(); |
|
326 |
out.println(SettingKey.getJsHint("微信错误代码:" + e.getErrCode()+",错误信息:"+e.getErrCodeDes())); |
|
327 |
} |
|
328 |
return ; |
|
329 |
}catch(Exception e ) { |
|
330 |
e.printStackTrace(); |
|
331 |
out.println(SettingKey.getJsHint(e.getMessage())); |
|
332 |
}finally { |
|
333 |
SpObserver.setDBtoInstance(); |
|
334 |
} |
|
335 |
%> |