1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 银联支付(WAP支付)

银联支付(WAP支付)

时间:2019-07-08 17:30:31

相关推荐

银联支付(WAP支付)

一,准备工作:开发阶段只需要银联的测试账号即可。

上官网/ajweb/product/detail?id=66找到Demo/SDK

,选择自己要做的

下载成功后打开官方文档/ajweb/help/api

二,打开eclipse

1,首先把demo中的SDK下的文件导入到项目中

2,把证书文件放到项目中acp_sdk.properties,并且把证书放在本地指定文件夹下

![这里写图片描述](https://img-/1121165105353?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveml5dXh1YW45MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)![这里写图片描述](https://img-/1121165158891?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveml5dXh1YW45MA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

3,根据文档传参调用第三方(银联接口)

三:流程图

四:开发代码实例:

/*** @Description<p>银联支付</p>* @author:spwang* @throws IOException* @Version:1.0* @date 7月24日 上午11:19:59* @email wangshuping@*/@RequestMapping(value = "/unionPay", produces = { "application/json;charset=UTF-8" })public void unionPay(HttpServletRequest request, HttpServletResponse response) {_log.info("start 银联支付开始");try {String sign = request.getParameter("sign");// 签名String orderPayId = request.getParameter("payId");// 支付idString txtAmount = request.getParameter("actuallyPaidAmt");// 交易金额String isRecharge = request.getParameter("isRecharge");// 支付来源的标识0:支付,1充值if (StringUtils.isBlank(orderPayId)) {_log.info("接口异常,异常信息:", "支付id不能为null");}if (StringUtils.isBlank(txtAmount)) {_log.info("接口异常,异常信息:", "订单交易金额actuallyPaidAmt不能为null");}if (StringUtils.isBlank(isRecharge)) {_log.info("接口异常,异常信息:", "支付来源的标识isRecharge不能为null");}String signStr = orderPayId + txtAmount + isRecharge;String signAccept = MD5Util.GetMD5Code(signStr);_log.info("签名sign=" + sign);_log.info("待签名数据signStr=" + signStr);_log.info("签名数据signAccept=" + signAccept);if (sign.equals(signAccept)) {// 校验签名_log.info("start 进入银联支付页");Map<String, String> paramMap = getParameterMap(orderPayId, txtAmount, isRecharge);HttpClientUtil httpClientUtil = HttpClientUtil.getHttpClient();String result = httpClientUtil.executePost(SDKConfig.frontRequestUrl, paramMap);_log.info("打印请求HTML,此为请求报文,为联调排查问题的依据:" + result);PrintWriter out = response.getWriter();out.print(result);_log.info("end 进入银联支付页");} else {_log.info("接口异常,异常信息:", "签名不正确");}} catch (BusinessException e) {_log.error("## 进入银联支付页出现业务异常,errorCode={} , errorMessage={}", e.getCode(), e.getMessage());_log.error("异常堆栈:" + ExceptionStackTraceUtil.getStackTraceAsString(e));} catch (Exception e) {_log.error("## 进入银联支付页出现异常,errorCode={} , errorMessage={}", e.getMessage());_log.error("异常堆栈:" + ExceptionStackTraceUtil.getStackTraceAsString(e));}}// 组装银联请求参数private Map<String, String> getParameterMap(String orderPayId, String txtAmount, String isRecharge) {Map<String, String> requestData = new HashMap<String, String>();// 版本号,全渠道默认值requestData.put("version", SDKConfig.version); // 字符集编码,可以使用UTF-8,GBK两种方式requestData.put("encoding", SDKConfig.encoding); // 签名方法requestData.put("signMethod", SDKConfig.signMethod); // 交易类型 ,01:消费requestData.put("txnType", "01"); // 交易子类型, 01:自助消费requestData.put("txnSubType", "01"); // 业务类型,B2C网关支付,手机wap支付requestData.put("bizType", "000201"); // 渠道类型,这个字段区分B2C网关支付和手机wap支付;07:PC,平板 08:手机requestData.put("channelType", "07");/*** 商户接入参数 ***/// 商户号码,请改成自己申请的正式商户号或者open上注册得来的777测试商户号requestData.put("merId", SDKConfig.merId); // 接入类型,0:直连商户requestData.put("accessType", "0"); // 商户订单号,8-40位数字字母,不能含“-”或“_”,可以自行定制规则requestData.put("orderId", orderPayId); // 订单发送时间,取系统时间,格式为YYYYMMDDhhmmss,必须取当前时间,否则会报txnTime无效requestData.put("txnTime", getCurrentTime()); // 交易币种(境内商户一般是156 人民币)requestData.put("currencyCode", "156"); // 交易金额,单位分,不要带小数点requestData.put("txnAmt", txtAmount); // (支付来源的标识0:支付,1充值)requestData.put("reqReserved", isRecharge);// 支付前台回调地址requestData.put("frontUrl", SDKConfig.frontUrl);// 支付后台回调地址requestData.put("backUrl", SDKConfig.backUrl);//支付超时时间requestData.put("payTimeout",new SimpleDateFormat("yyyyMMddHHmmss").format(new Date().getTime() + 15 * 60 * 1000));// 订单超时时间。/** 请求参数设置完毕,以下对请求参数进行签名并生成html表单,将表单写入浏览器跳转打开银联页面 **/Map<String, String> submitFromData = AcpService.sign(requestData, SDKConfig.encoding); // 报文中certId,signature的值是在signData方法中获取并自动赋值的,只要证书配置正确即可。return submitFromData;}/*** post请求* @param url 请求路径* @param params 请求参数* @return 响应字符串*/public String executePost(String url, Map<String, String> params) {log.info("HttpClient POST请求===:" + url);HttpPost post = new HttpPost(url);ResponseHandler<String> responseHandler = new BasicResponseHandler();String responseJson = null;try {if(null != params) {List<NameValuePair> parameters = new ArrayList<NameValuePair>();for (String key : params.keySet()) {parameters.add(new BasicNameValuePair(key,params.get(key)));}try {post.setEntity(new UrlEncodedFormEntity(parameters));} catch (UnsupportedEncodingException e) {e.printStackTrace();}}responseJson = httpClient.execute(post, responseHandler);log.info("HttpClient POST请求结果:" + responseJson);} catch (Exception e) {log.info("HttpClient POST请求异常:" + e.getMessage());} finally {httpClient.getConnectionManager().closeExpiredConnections();httpClient.getConnectionManager().closeIdleConnections(30, TimeUnit.SECONDS);}return responseJson;}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。