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.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>&nbsp;&nbsp;确认支付:<%=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 %>