From 22d9738920563cb225538edb2647011434529e7e Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Tue, 30 Jan 2018 15:44:52 +0800 Subject: [PATCH 1/2] QB top up --- .../manage/ofei/bean/PhoneTopUpQuery.java | 11 +++++ .../payment/manage/ofei/core/OfeiClient.java | 3 ++ .../payment/manage/ofei/core/OfeiServer.java | 3 ++ .../manage/ofei/core/impl/OfeiClientImpl.java | 48 +++++++++++++++++-- .../manage/ofei/core/impl/OfeiServceImpl.java | 12 +++++ .../payment/manage/ofei/enums/OfeiType.java | 21 ++++++++ .../manage/ofei/web/PhoneTopUpController.java | 20 ++++++-- .../manage/mappers/ofei/TopUpOrderMapper.xml | 3 ++ src/main/ui/static/cms/cms.js | 11 +++-- .../ui/static/cms/templates/phone_top_up.html | 38 +++++++++++++-- .../ui/static/config/devtools/devtools.js | 2 +- .../ofei/core/impl/OfeiClientImplTest.java | 27 +++++++++++ 12 files changed, 182 insertions(+), 17 deletions(-) create mode 100644 src/main/java/au/com/royalpay/payment/manage/ofei/enums/OfeiType.java create mode 100644 src/test/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImplTest.java diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/bean/PhoneTopUpQuery.java b/src/main/java/au/com/royalpay/payment/manage/ofei/bean/PhoneTopUpQuery.java index 3f10d8daa..d7e72fac5 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/bean/PhoneTopUpQuery.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/bean/PhoneTopUpQuery.java @@ -13,6 +13,8 @@ public class PhoneTopUpQuery { private String phone; + private String type; + private int page = 1; private int limit = 10; @@ -57,11 +59,20 @@ public class PhoneTopUpQuery { this.phone = phone; } + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + public JSONObject toParam(){ JSONObject param = new JSONObject(); param.put("status",this.status); param.put("amount",this.amount); param.put("customer_number",this.phone); + param.put("type",this.type); return param; } } diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiClient.java b/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiClient.java index f16a47b7b..561baab46 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiClient.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiClient.java @@ -17,4 +17,7 @@ public interface OfeiClient { void checkFlow(String phoneNumber, String flowValue, String perValue); Element checkOrderStatus(String orderId); + + void qbTopUp(String price, String qqNumber); + } diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiServer.java b/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiServer.java index a9b1428c6..fc8c0503e 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiServer.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/core/OfeiServer.java @@ -12,4 +12,7 @@ public interface OfeiServer { void phoneTopUp(String price, boolean quickTopUp, String topUpDelayTime, String phoneNumber); + void qbTopUp(String price, String phoneNumber); + + } diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java b/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java index 0ec0710c5..a20720fd3 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java @@ -4,7 +4,9 @@ import java.io.IOException; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import javax.annotation.Resource; @@ -27,6 +29,7 @@ import com.alibaba.fastjson.JSONObject; import au.com.royalpay.payment.core.exceptions.ChannelNetworkException; import au.com.royalpay.payment.manage.mappers.ofei.TopUpOrderMapper; import au.com.royalpay.payment.manage.ofei.core.OfeiClient; +import au.com.royalpay.payment.manage.ofei.enums.OfeiType; import au.com.royalpay.payment.tools.codec.MD5Hash; import au.com.royalpay.payment.tools.exceptions.BadRequestException; import au.com.royalpay.payment.tools.exceptions.ServerErrorException; @@ -55,6 +58,14 @@ public class OfeiClientImpl implements OfeiClient { private final String flowTopUPUrl = "http://api2.ofpay.com/flowOrder.do"; private final String checkFlowUrl = "http://api2.ofpay.com/flowCheck.do"; private final String checkOrderUrl = "http://api2.ofpay.com/queryOrderInfo.do"; + private final String qbTopUpUrl = "http://apitest.ofpay.com/onlineorder.do"; + private static final Map qbCardId = new HashMap<>(); + static { + qbCardId.put("10","220615"); + qbCardId.put("30","220617"); + qbCardId.put("50","220698"); + qbCardId.put("100","220699"); + } @Override public void phoneTopUp(String price, boolean quickTopUp, String topUpDelayTime, String phoneNumber) { @@ -75,13 +86,13 @@ public class OfeiClientImpl implements OfeiClient { params.add(new BasicNameValuePair("game_userid", phoneNumber)); params.add(new BasicNameValuePair("ret_url", "https://mpay.royalpay.com.au/ofei/notice/"+orderId)); - saveOrder(orderId, now, "1", price, phoneNumber); + saveOrder(orderId, now, OfeiType.PHONE.getMask(), price, phoneNumber); HttpRequestGenerator req = initRequest(topUPUrl, signAndEncryptForm(params), RequestMethod.GET); Element respXml = executeRequestXML(req, "ofei phone top up fail"); handleResponse(orderId, respXml,phoneNumber); } - private void handleResponse(String orderId, Element respXml,String phoneNumber) { + private void handleResponse(String orderId, Element respXml,String customerNumber) { JSONObject detail = new JSONObject(); if ("1".equals(respXml.elementText("retcode"))) { detail.put("cardname", respXml.elementText("cardname")); @@ -103,7 +114,7 @@ public class OfeiClientImpl implements OfeiClient { }else { detail.put("err_msg",respXml.elementText("err_msg")); updateOrder(orderId,"99",detail); - logger.debug("phone->"+phoneNumber+" top up error orderId->"+orderId); + logger.debug("Customer NUmber->"+customerNumber+" top up error orderId->"+orderId); throw new ServerErrorException("System error"); } } @@ -145,7 +156,7 @@ public class OfeiClientImpl implements OfeiClient { params.add(new BasicNameValuePair("effectTime", "1")); params.add(new BasicNameValuePair("netType", "4G")); params.add(new BasicNameValuePair("sporderId", orderId)); - saveOrder(orderId, new Date(), "2", perValue, phoneNumber); + saveOrder(orderId, new Date(), OfeiType.FLOW.getMask(), perValue, phoneNumber); HttpRequestGenerator req = initRequest(flowTopUPUrl, signAndEncryptForm(params), RequestMethod.GET); Element respXml = executeRequestXML(req, "ofei flowTopUp"); handleResponse(orderId, respXml,phoneNumber); @@ -188,6 +199,35 @@ public class OfeiClientImpl implements OfeiClient { return executeRequestXML(req,"ofei check order status error"); } + @Override + public void qbTopUp(String price, String qqNumber) { + if(price.contains(".")){ + throw new BadRequestException("Invalid Price"); + } + String orderId = "ofei-" + DateFormatUtils.format(new Date(), "yyyyMMddHHmmss") + "-" + RandomStringUtils.random(5, true, true); + List params = new ArrayList<>(); + String md5Pwd = MD5Hash.hashToHex(pwd); + Date now = new Date(); + params.add(new BasicNameValuePair("userid", spCode)); + params.add(new BasicNameValuePair("userpws", md5Pwd)); + if(qbCardId.containsKey(price)){ + params.add(new BasicNameValuePair("cardid", qbCardId.get(price))); + params.add(new BasicNameValuePair("cardnum", "1")); + }else { + params.add(new BasicNameValuePair("cardid", "220612")); + params.add(new BasicNameValuePair("cardnum", price)); + } + params.add(new BasicNameValuePair("sporder_id", orderId)); + params.add(new BasicNameValuePair("sporder_time", DateFormatUtils.format(now, "yyyyMMddHHmmss"))); + params.add(new BasicNameValuePair("game_userid", qqNumber)); + params.add(new BasicNameValuePair("ret_url", "https://mpay.royalpay.com.au/ofei/notice/"+orderId)); + saveOrder(orderId, now, OfeiType.QB.getMask(), price, qqNumber); + HttpRequestGenerator req = initRequest(qbTopUpUrl, signAndEncryptForm(params), RequestMethod.POST); + Element respXml = executeRequestXML(req, "ofei QB top up fail"); + handleResponse(orderId, respXml,qqNumber); + } + + private List signAndEncryptForm(List params) { String signStr = ""; for (NameValuePair pair : params) { diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiServceImpl.java b/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiServceImpl.java index 6cf306b3d..616d93f8c 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiServceImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiServceImpl.java @@ -94,4 +94,16 @@ public class OfeiServceImpl implements OfeiServer { stringRedisTemplate.boundValueOps(reidsCheckCodeKey).set(bindId, 10, TimeUnit.MINUTES); } + @Override + public void qbTopUp(String price, String qqNumber) { + String reidsCheckCodeKey = "qbtopup"+qqNumber; + String value = stringRedisTemplate.boundValueOps(reidsCheckCodeKey).get(); + if (!StringUtils.isEmpty(value)) { + throw new ForbiddenException("A phone number can only be recharged in 10 minutes"); + } + ofeiClient.qbTopUp(price,qqNumber); + String bindId = RandomStringUtils.random(6, false, true); + stringRedisTemplate.boundValueOps(reidsCheckCodeKey).set(bindId, 10, TimeUnit.MINUTES); + } + } diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/enums/OfeiType.java b/src/main/java/au/com/royalpay/payment/manage/ofei/enums/OfeiType.java new file mode 100644 index 000000000..a41042ba4 --- /dev/null +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/enums/OfeiType.java @@ -0,0 +1,21 @@ +package au.com.royalpay.payment.manage.ofei.enums; + +/** + * Created by wangning on 30/01/2018. + */ +public enum OfeiType { + PHONE("1"), // 话费 + FLOW("2"), // 流量 + QB("3");// Q币 + + private String mask; + + OfeiType(String mask) { + this.mask = mask; + } + + public String getMask() { + return mask; + } + +} diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/web/PhoneTopUpController.java b/src/main/java/au/com/royalpay/payment/manage/ofei/web/PhoneTopUpController.java index 3c68e9e41..dd3b68d92 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/web/PhoneTopUpController.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/web/PhoneTopUpController.java @@ -3,6 +3,7 @@ package au.com.royalpay.payment.manage.ofei.web; import au.com.royalpay.payment.manage.ofei.bean.PhoneTopUpQuery; import au.com.royalpay.payment.manage.ofei.core.OfeiServer; import au.com.royalpay.payment.manage.ofei.core.PhoneTopUpService; +import au.com.royalpay.payment.tools.exceptions.BadRequestException; import com.alibaba.fastjson.JSONObject; @@ -17,19 +18,28 @@ import javax.annotation.Resource; * Created by wangning on 2017/12/8. */ @RestController -@RequestMapping("/phone_top_up") +@RequestMapping("/top_up") public class PhoneTopUpController { @Resource private OfeiServer ofeiServer; @Resource private PhoneTopUpService phoneTopUpService; - @RequestMapping(value = "/recharge",method = {RequestMethod.GET, RequestMethod.POST}) - public void recharge(@RequestParam String phoneNumber, @RequestParam String amount) { - ofeiServer.phoneTopUp(amount,true,null,phoneNumber); + @RequestMapping(value = "/recharge", method = { RequestMethod.GET, RequestMethod.POST }) + public void recharge(@RequestParam String customerNumber, @RequestParam String amount, @RequestParam(defaultValue = "1") String type) { + switch (type) { + case "1": + ofeiServer.phoneTopUp(amount, true, null, customerNumber); + break; + case "3": + ofeiServer.qbTopUp(amount, customerNumber); + break; + default: + throw new BadRequestException("unknow top up type"); + } } - @RequestMapping(value = "/list",method = {RequestMethod.GET, RequestMethod.GET}) + @RequestMapping(value = "/list", method = { RequestMethod.GET, RequestMethod.GET }) public JSONObject list(PhoneTopUpQuery phoneTopUpQuery) { return phoneTopUpService.listPageable(phoneTopUpQuery); } diff --git a/src/main/resources/au/com/royalpay/payment/manage/mappers/ofei/TopUpOrderMapper.xml b/src/main/resources/au/com/royalpay/payment/manage/mappers/ofei/TopUpOrderMapper.xml index af1603283..ae8e329c1 100644 --- a/src/main/resources/au/com/royalpay/payment/manage/mappers/ofei/TopUpOrderMapper.xml +++ b/src/main/resources/au/com/royalpay/payment/manage/mappers/ofei/TopUpOrderMapper.xml @@ -22,6 +22,9 @@ amount = #{amount} + + `type` = #{type} + \ No newline at end of file diff --git a/src/main/ui/static/cms/cms.js b/src/main/ui/static/cms/cms.js index 4d201ef60..5e8dce376 100644 --- a/src/main/ui/static/cms/cms.js +++ b/src/main/ui/static/cms/cms.js @@ -44,12 +44,12 @@ define(['angular', 'uiRouter', 'static/commons/angular-ueditor'], function (angu app.controller('cmsRootCtrl', ['$scope', function ($scope) { }]); - app.controller('CmsPhonetopupCtrl', ['$scope', '$http', '$filter', function ($scope, $http, $filter) { + app.controller('CmsPhonetopupCtrl', ['$scope', '$http', function ($scope, $http) { $scope.queryParams = {}; $scope.pagination = {}; $scope.topUp = function () { var params = angular.copy($scope.params); - $http.get('/phone_top_up/recharge',{params: params}).then(function (resp) { + $http.get('/top_up/recharge',{params: params}).then(function (resp) { alert('ok'); }, function (resp) { alert(resp.data.message); @@ -68,7 +68,10 @@ define(['angular', 'uiRouter', 'static/commons/angular-ueditor'], function (angu if(params.status==''|| params.status==null){ delete params.status; } - $http.get('/phone_top_up/list',{params: params}).then(function (resp) { + if(params.type==''|| params.type==null){ + delete params.type; + } + $http.get('/top_up/list',{params: params}).then(function (resp) { $scope.orders = resp.data.data; $scope.pagination = resp.data.pagination; }) @@ -133,6 +136,8 @@ define(['angular', 'uiRouter', 'static/commons/angular-ueditor'], function (angu return '话费充值'; case '2': return '流量'; + case '3': + return 'QB'; } } }); diff --git a/src/main/ui/static/cms/templates/phone_top_up.html b/src/main/ui/static/cms/templates/phone_top_up.html index 9940a0ae3..28a4a205e 100644 --- a/src/main/ui/static/cms/templates/phone_top_up.html +++ b/src/main/ui/static/cms/templates/phone_top_up.html @@ -17,8 +17,24 @@
- - Type + +
+

Required + Field

+
+
+
+ +
@@ -55,13 +71,27 @@ Refund | fail | + ng-click="queryParams.status='20';listTopUpOrders(1)">Fail | Error

- +
+ +
+

+ All | + Phone | + Flow | + QB +

+
+
diff --git a/src/main/ui/static/config/devtools/devtools.js b/src/main/ui/static/config/devtools/devtools.js index cd653273d..d636bc2a7 100644 --- a/src/main/ui/static/config/devtools/devtools.js +++ b/src/main/ui/static/config/devtools/devtools.js @@ -229,7 +229,7 @@ define(['angular', 'uiRouter', 'uiBootstrap'], function (angular) { app.controller('phonetopupCtrl', ['$scope', '$http', '$filter', function ($scope, $http, $filter) { $scope.topUp = function () { var params = angular.copy($scope.params); - $http.get('/phone_top_up/recharge',{params: params}).then(function (resp) { + $http.get('/top_up/recharge',{params: params}).then(function (resp) { alert('ok'); }, function (resp) { alert(resp.data.message); diff --git a/src/test/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImplTest.java b/src/test/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImplTest.java new file mode 100644 index 000000000..6f59dff81 --- /dev/null +++ b/src/test/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImplTest.java @@ -0,0 +1,27 @@ +package au.com.royalpay.payment.manage.ofei.core.impl; + +import au.com.royalpay.payment.manage.ofei.core.OfeiClient; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.ActiveProfiles; +import org.springframework.test.context.junit4.SpringRunner; + +import javax.annotation.Resource; + +/** + * Created by wangning on 30/01/2018. + */ +@SpringBootTest +@ActiveProfiles({ "local", "alipay", "wechat", "jd", "bestpay" }) +@RunWith(SpringRunner.class) +public class OfeiClientImplTest { + @Resource + private OfeiClient ofeiClient; + @Test + public void qbTopUp() throws Exception { + ofeiClient.qbTopUp("10","164851225"); + } + +} \ No newline at end of file From bf9f170a311bf8a69c114915ccdcf22a9d04237a Mon Sep 17 00:00:00 2001 From: wangning <164851225@qq.com> Date: Tue, 30 Jan 2018 16:24:31 +0800 Subject: [PATCH 2/2] update --- .../royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java b/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java index a20720fd3..8630029bf 100644 --- a/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java +++ b/src/main/java/au/com/royalpay/payment/manage/ofei/core/impl/OfeiClientImpl.java @@ -58,7 +58,7 @@ public class OfeiClientImpl implements OfeiClient { private final String flowTopUPUrl = "http://api2.ofpay.com/flowOrder.do"; private final String checkFlowUrl = "http://api2.ofpay.com/flowCheck.do"; private final String checkOrderUrl = "http://api2.ofpay.com/queryOrderInfo.do"; - private final String qbTopUpUrl = "http://apitest.ofpay.com/onlineorder.do"; + private final String qbTopUpUrl = "http://api2.ofpay.com/onlineorder.do"; private static final Map qbCardId = new HashMap<>(); static { qbCardId.put("10","220615");