fs-danaus
2022-08-05 4a551fc73bd4c86f43aa68c0aab8d1dbeae46836
提交 | 用户 | 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>&nbsp;&nbsp;<%= (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>&nbsp;&nbsp;<%= orderEntity.getCltName() %>&nbsp;&nbsp;&nbsp;&nbsp;<i class="fa fa-phone" style="font-size:20px;" aria-hidden="true"></i>&nbsp;&nbsp;<%= 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>&nbsp;&nbsp;<%= 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>&nbsp;&nbsp;<%= orderEntity.getDocCode() %>
247          &nbsp;&nbsp;<%= (new SimpleDateFormat("yyyy-MM-dd")).format( orderEntity.getDocDate()) %>
248          &nbsp;&nbsp;<%= 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>&nbsp;&nbsp;<% 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 %>