公司需要用到第三方支付(爱贝微支付):
首先支付流程
html示例:
<script src="http://web.iapppay.com/h5/v1.0.1/js/aibei_v1.1.0.js" type="text/javascript" charset="utf-8"></script> //导入爱贝包
<script>
//生成对象
var aibeiPay = new AiBeiPay();
//进入方法 function aiPay1(waresid, money) { try{ javascript:contact.pay(waresid,money); }catch(err){ var transId = selectPost(waresid, money); //向服务器下单获取下单编号,此函数需自己编写 if (transId == undefined){ return } var data = {}; data.transId = transId; //下单编号 data.retFunc = "callbackData";//当用户点击“返回游戏”按钮时调用该函数。回调函数的参数为支付结果数据,与购买结果通知e.data数据一 data.baseZIndex = 88; data.closeTxt = "返回游戏" //自定义返回游戏按钮 data.redirecturl = "http://123.59.3; //当支付页面跳出收银台后,查询结果页回跳地址(必填) data.cpurl = "http://123.59.3;//返回商户地址,可以不填写 data.sign = getEncStr(transId + data.redirecturl + data.cpurl);//用RSA(transId+redirecturl+cpurl)签名数据 data.signtype = "RSA"; // data.retFunc = "callbackData"; aibeiPay.clickAibei(data); //调起收银台的JS函数 } } //向服务器请求下单 function selectPost(waresid, money) { var id = ""; $.ajax({ url : "/BigMillionaire/MyUser/sendPay.do", type : 'POST', dataType : "text", async : false, data : { gameid : waresid, pay : money }, success : function(data) { // alert(data); id = data; }, error : function(e) { console.log(e); } }); return id; } //获得sign function getEncStr(dat) { var url = "" // alert(dat) $.ajax({ url : "/BigMillionaire/MyUser/sendPay2.do", type : 'POST', dataType : "text", data : { id : dat }, async : false, success : function(data) { // alert(data); url = data; }, error : function(e) { console.log(e); } }); return url; } //购买结果通知 function callbackData(data) { var dd = data.OrderStatus; switch(dd) { case 0: alert("支付成功"); window.location.href="http://1); break; case 1: alert("支付失败"); break; case 2: alert("待支付"); break; case 3: alert("正在处理"); break; case 4: alert("系统异常"); break; default: alert("充值异常"); } }
</script>
服务器示例:
/** * 盒子用户充值生成订单 * @param req * @param resp * @param gameid * @param pay * @throws ServletException * @throws IOException */ @RequestMapping("/sendPay") public void sendPay(HttpServletRequest req, HttpServletResponse resp,int gameid,String pay) throws ServletException, IOException { double x = Math.random(); OrderReq orderReq = new OrderReq(); orderReq.setAppId("3002421322"); orderReq.setWaresId(1); orderReq.setWarasName("9k9k盒子充值"); orderReq.setAppUserId(gameid+"");//用户在商户应用的唯一标识 orderReq.setCpOrderId("9k9k"+x); //商户生成的订单号,需要保证系统唯一 orderReq.setCpPrivateInfo("验证9k"); orderReq.setCurrency("RMB");//货币类型以及单位: // orderReq.setNotifyUrl("http。。BigMillionaire/MyUser/succe.do ");//商户服务端接收支付结果通知的地址 orderReq.setNotifyUrl("http://123。。/MyUser/succe.do ");//商户服务端接收支付结果通知的地址 orderReq.setPrice(Float.parseFloat(pay)); OrderRes orderRes = orderReq.send(); //发送请求 // // 检查返回值,有ErrorCode时表示请求错误 if( orderRes.getErrorCode() != null && orderRes.getErrorCode().trim().length() > 0 ){ // System.out.println( orderRes.getErrorCode() ); System.out.println( orderRes.getErrMsg() ); }else{ // 结果 System.out.println( orderRes.getTransid() ); } // onResp(orderRes,resp); resp.getWriter().print(orderRes.getTransid()); //返回订单号 }
/** * 生成sign签名 * @param req * @param resp * @param id * @throws ServletException * @throws IOException */ @RequestMapping("/sendPay2") public void sendPay2(HttpServletRequest req, HttpServletResponse resp, String id) throws ServletException, IOException { // System.out.println("传入参数"+id); String str=""; try { // sign = SignHelper.sign(transdataStr, ConstValue.PRIVATE_KEY); str = SignHelper.sign(id, ConstValue.PRIVATE_KEY); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } resp.setCharacterEncoding("utf-8"); try { resp.getWriter().print(str); return; } catch (Exception e) { resp.getWriter().print(JSON.toJSONString(str)); return; } } private void onResp(OrderRes orderRes,HttpServletResponse resp) throws IOException { JSONObject respObject = new JSONObject(); // 检查返回值,有ErrorCode时表示请求错误 if( orderRes.getErrorCode() != null && orderRes.getErrorCode().trim().length() > 0 ){ respObject.put("code", orderRes.getErrorCode()); respObject.put("ErrMsg", orderRes.getErrMsg() ); }else{ respObject.put("transid", orderRes.getTransid()); } BufferedWriter bw = new BufferedWriter(resp.getWriter()); bw.write(URLEncoder.encode(respObject.toString())); bw.flush(); } /** * 盒子充值成功通知 * @param req * @param resp * @throws ServletException * @throws IOException */ @RequestMapping("/succe") public void succe(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { BufferedReader br = req.getReader(); StringBuffer orderResStr = new StringBuffer(); String line = ""; while ((line = br.readLine()) != null) { orderResStr.append(line); // System.out.println(line); } br.close(); if ("".equals(orderResStr.toString())) { return; } String param = orderResStr.toString(); String paras = URLDecoder.decode(param,"UTF-8"); //成功后的数据 System.out.println(paras); int ss = succeSql(paras); if(ss==1){ resp.getWriter().print("success"); } return; }
/** * 盒子充值成功存入数据 * @param param * @return * @throws UnsupportedEncodingException */ public int succeSql(String param) throws UnsupportedEncodingException{ int startIndex= param.lastIndexOf("{"); int lastIndex= param.lastIndexOf("}"); param = param.substring(startIndex,lastIndex+1); // System.out.println(param); JSONObject params = JSONObject.fromObject(param); String billno = params.getString("cporderid"); //自己订单号 String memono = params.getString("transid"); //爱贝订单 String gameids = params.getString("appuserid");//玩家ID // String gameids = "3"; String amounts = params.getString("money"); //钱 String status = params.getString("result");//充值状态 String tm = params.getString("transtime");//充值时间 int gameid = 0; if(gameids.length()>0&&gameids!=null){ gameid = Integer.parseInt(gameids); } int amount = 0; if(amounts.length()>0&&amounts!=null){ amount = (int) (Float.parseFloat(amounts)*100); } int statu =0; if(status.length()>0&&status!=null){ statu = Integer.parseInt(status); } //操作充值日志。 myUserService.upLog(billno,memono,gameid,amount,statu,tm); //给用户添加金币 myUserService.addGold(gameid,amount); return 1; }