支付功能3具体有哪些特色和优势,能详细介绍一下吗?

2026-04-19 11:216阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1400个文字,预计阅读时间需要6分钟。

支付功能3具体有哪些特色和优势,能详细介绍一下吗?

1. 内网穿透完整测试程序:使用ngrok,直接注册一个账户开通隧道即可,简单方便。KuaiQianService

2.微信支付://服务器接收支付结果的后台地址,该参数业务必填,不能为空。//String bgUrl

1.内网穿透完整测试程序180

我们使用ngrok,直接注册一个账号开通隧道即可,简单方便

KuaiQianService181

micr-pay

//服务器接收支付结果的后台地址,该参数务必填写,不能为空。 //String bgUrl = "localhost:9000/pay/kq/rece/notify"; String bgUrl = "oayunshang3.v1.idcfengye.com/pay/kq/rece/notify";//内网穿透地址 181

KuaiQianController181

micr-pay

//接收快钱给商家的支付结果 , 快钱以get方式,发送请求给商家 170 @GetMapping("/rece/notify") @ResponseBody public String payResultNotify(HttpServletRequest request){ System.out.println("==============接收快钱的异步通知============");//181 kQService.kqNotify(request); return "<result>1</result><redirecturl>localhost:8080/</redirecturl>"; }

测试181

启动micr-datasevice、micr-web、micr-pay

运行ngrok内网穿透

启动redis

启动zookeeper

测试我们用到的信息

测试银行卡: 可用的银行卡: 6214 6800 3838 7096 北京银行的 姓名:张峰 身份证 110101199105149839 测试环境:不对卡,姓名,身份证做检查, 正式环境会检查。

支付一分钱,点击支付

跳转到快钱支付界面,更换信息

点击返回商家

成功

看看后台输出,没问题

看看数据库资金表,增加了一分钱

充值记录表也没问题

再次进入用户中心,查询到一条充值记录

至此我们整个支付程序,成功

2.补单处理182

补单查询快钱响应的数据格式

我们主要是获取这部分数据

{ "recordCount": "30", "pageCount": "1", "orderDetail": [ { "orderId": "1642244020946593", "orderAmount": 3, "orderTime": "20120605012740", "dealTime": "20120605013104", "payResult": "10", "payType": "10", "payAmount": 3, "fee": 1, "dealId": "23023847", "signInfo": "jGf9%2F7vKOUkK%2B93ZcTxT9IOFoEhxSEDHmwKbdtEJuEHd4DhPU3BlotuujtHIHlaEPHp48t8c0uj78TzD M%2FUQeaH15o5DNmdRencMD0mo%2FmSRNEHtqgOZfY3H3VR4SbYUDgIf7YVAspBoK3re3feroGGUA8%2BKue8 %2BgzPOjp%2Fgkkeh4GuA4KAAnunTuxELc82rsP0CuosawodILiHTvDwoyF1EgAIQqEChgdHbpQUtiCevluYK ORmwZJlN804L8GPmobMZXr4CVtVTYcGuOIUXzz4ImXEnfesCP2f6BOoJD14SIxU%2BrWHppByEKtKodUCJ7FA 0pxCB6uqHUE3eNHuw1Q%3D%3D" } ], "signMsg": "f3oEXOdTflGvJScrHZbjQQgz3RTwSnLTvHTJn0GUHcAAIjnXfN2rV79gWbEwRExkFfFq%2FEXl29%2Fw5ID3 cfalx4hGqktXARUqf0WYKTz%2B3Un8%2Bv2vtcMXzfQAopKnPSAawZJ2CTWwSq9xkWxlTZj%2B7%2Bj1n9maa dCAVwsaNUFZN%2FT4t%2BqqMsI8wAfk%2FFcSwcwo2CDr%2F%2Bp2WQ3sQbVYDBd4hFa3s3Q24zeH9u7x9cZp 2gNS7UdERTe7ksBjuhImnoJahNOP5WIzxZaXNpDFNwa0qjRhVFzMs97T7aa8M4LOhaI%2F8mesYGa8D50VlvY 8GtApr%2F3CebFKRf8uU1XGqfZsXA%3D%3D", "signType": 2, "pageSize": "30", "merchantAcctId": "1001162931901", "errCode": "", "currentPage": "1", "version": "v2.0" }

2.1业务接口实现类KuaiQianService183

工具类HttpUtil183

micr-pay

资源在E:\java学习\盈利宝\资料\资料\10-快钱支付\人民币网关\DEMO\JAVA\人民币网关支付、退款查询\HttpQuery\src\com\query\Test

package com.bjpowernode.util; import java.net.SocketTimeoutException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.sandbox.99bill.com/gatewayapi/gatewayOrderQuery.do"; String response = ""; try { response = HttpUtil.doPostJsonRequestByHttps(JSON.toJSONString(request), reqUrl, 3000, 8000); //解析response 183-184 if(StringUtils.isNotBlank(response)){ Object detailObject = JSONObject.parseObject(response).get("orderDetail"); System.out.println("detailObject===="+detailObject); if( detailObject != null){ //把查询的Object转为JSONArray //解释orderDetail部分数据,本身是一个数组被放在了json中 ///我们将得到的detailObject对象转为json的数组形式 JSONArray array = (JSONArray)detailObject; //取出json数组的第一个元素 184 JSONObject detailJsonObject = array.getJSONObject(0); if( detailJsonObject != null){ //处理充值结果,和异步通知一样 184 int result = rechargeService.handleKQNotify( detailJsonObject.getString("orderId"),//订单号 detailJsonObject.getString("payAmount"),//实付金额 detailJsonObject.getString("payResult")//支付结果 ); System.out.println("处理的订单号是:"+orderId+",处理结果:"+result); } } } //删除redis中的订单 184 stringRedisTemplate.boundZSetOps(RedisKey.KEY_ORDERID_SET).remove(orderId); } catch (Exception e) { e.printStackTrace(); return; } }

2.2控制controller183

KuaiQianController

micr-pay

//补单操作 183 //从定时任务,调用接口 183 @GetMapping("/rece/query") @ResponseBody public String queryKQOrder(){ kQService.handlerQueryOrder(); return "接收了查询的请求"; }

2.3在定时任务中掉用184

TaskManager184

micr-task

//调用查询补单接口 184 @Scheduled(cron = "0 0/20 * * * ?")//每隔20分钟查询一次 public void invokeKuaiQianQuery(){ try { String url = "localhost:9000/pay/kq/rece/query"; HttpClientUtils.doGet(url); }catch (Exception e){ e.printStackTrace(); } }

启动类184

micr-task

2.4测试185

为了方便测试我们从数据库中拷贝一个已经处理过的订单

将订单号拷贝进redis

启动micr-datasevice、micr-web、micr-task、debug启动micr-pay

运行ngrok内网穿透

启动redis

启动zookeeper

在程序遍历第一个订单时也就是红框,因为这个数据没有向快钱发起过支付请求,所以补单查询响应回来的数据orderDetail为空

当遍历到尾号819时,因为这个订单号是之前处理的,所以

处理结果为3证明已经处理过了,所以即便是orderDetail有数据,也不会处理

看看redis,存储订单的redis消失了,成功(因为我们程序设计的即使从redis去一个进行查询补单,就删除一个)

看看数据库819数据没有任何影响

资金表,资金也没有变化,成功

支付功能3具体有哪些特色和优势,能详细介绍一下吗?

至此,本项目完结

3.总结186

4.项目总体测试

4.1启动redis

4.2启动zookeeper

4.3首先启动micr-dataservice、micr-web、micr-pay

4.4启动内网穿透

(注意自己内网穿透使用的地址,要注意内网过期,过期的话就不要使用内网穿透了,去程序汇中修改KuaiQianService类的generateFormData的bgUrl属性就是了)

4.5启动前端

4.6测试

浏览器输入localhost:8080/

后续测试不在演示

本文共计1400个文字,预计阅读时间需要6分钟。

支付功能3具体有哪些特色和优势,能详细介绍一下吗?

1. 内网穿透完整测试程序:使用ngrok,直接注册一个账户开通隧道即可,简单方便。KuaiQianService

2.微信支付://服务器接收支付结果的后台地址,该参数业务必填,不能为空。//String bgUrl

1.内网穿透完整测试程序180

我们使用ngrok,直接注册一个账号开通隧道即可,简单方便

KuaiQianService181

micr-pay

//服务器接收支付结果的后台地址,该参数务必填写,不能为空。 //String bgUrl = "localhost:9000/pay/kq/rece/notify"; String bgUrl = "oayunshang3.v1.idcfengye.com/pay/kq/rece/notify";//内网穿透地址 181

KuaiQianController181

micr-pay

//接收快钱给商家的支付结果 , 快钱以get方式,发送请求给商家 170 @GetMapping("/rece/notify") @ResponseBody public String payResultNotify(HttpServletRequest request){ System.out.println("==============接收快钱的异步通知============");//181 kQService.kqNotify(request); return "<result>1</result><redirecturl>localhost:8080/</redirecturl>"; }

测试181

启动micr-datasevice、micr-web、micr-pay

运行ngrok内网穿透

启动redis

启动zookeeper

测试我们用到的信息

测试银行卡: 可用的银行卡: 6214 6800 3838 7096 北京银行的 姓名:张峰 身份证 110101199105149839 测试环境:不对卡,姓名,身份证做检查, 正式环境会检查。

支付一分钱,点击支付

跳转到快钱支付界面,更换信息

点击返回商家

成功

看看后台输出,没问题

看看数据库资金表,增加了一分钱

充值记录表也没问题

再次进入用户中心,查询到一条充值记录

至此我们整个支付程序,成功

2.补单处理182

补单查询快钱响应的数据格式

我们主要是获取这部分数据

{ "recordCount": "30", "pageCount": "1", "orderDetail": [ { "orderId": "1642244020946593", "orderAmount": 3, "orderTime": "20120605012740", "dealTime": "20120605013104", "payResult": "10", "payType": "10", "payAmount": 3, "fee": 1, "dealId": "23023847", "signInfo": "jGf9%2F7vKOUkK%2B93ZcTxT9IOFoEhxSEDHmwKbdtEJuEHd4DhPU3BlotuujtHIHlaEPHp48t8c0uj78TzD M%2FUQeaH15o5DNmdRencMD0mo%2FmSRNEHtqgOZfY3H3VR4SbYUDgIf7YVAspBoK3re3feroGGUA8%2BKue8 %2BgzPOjp%2Fgkkeh4GuA4KAAnunTuxELc82rsP0CuosawodILiHTvDwoyF1EgAIQqEChgdHbpQUtiCevluYK ORmwZJlN804L8GPmobMZXr4CVtVTYcGuOIUXzz4ImXEnfesCP2f6BOoJD14SIxU%2BrWHppByEKtKodUCJ7FA 0pxCB6uqHUE3eNHuw1Q%3D%3D" } ], "signMsg": "f3oEXOdTflGvJScrHZbjQQgz3RTwSnLTvHTJn0GUHcAAIjnXfN2rV79gWbEwRExkFfFq%2FEXl29%2Fw5ID3 cfalx4hGqktXARUqf0WYKTz%2B3Un8%2Bv2vtcMXzfQAopKnPSAawZJ2CTWwSq9xkWxlTZj%2B7%2Bj1n9maa dCAVwsaNUFZN%2FT4t%2BqqMsI8wAfk%2FFcSwcwo2CDr%2F%2Bp2WQ3sQbVYDBd4hFa3s3Q24zeH9u7x9cZp 2gNS7UdERTe7ksBjuhImnoJahNOP5WIzxZaXNpDFNwa0qjRhVFzMs97T7aa8M4LOhaI%2F8mesYGa8D50VlvY 8GtApr%2F3CebFKRf8uU1XGqfZsXA%3D%3D", "signType": 2, "pageSize": "30", "merchantAcctId": "1001162931901", "errCode": "", "currentPage": "1", "version": "v2.0" }

2.1业务接口实现类KuaiQianService183

工具类HttpUtil183

micr-pay

资源在E:\java学习\盈利宝\资料\资料\10-快钱支付\人民币网关\DEMO\JAVA\人民币网关支付、退款查询\HttpQuery\src\com\query\Test

package com.bjpowernode.util; import java.net.SocketTimeoutException; import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.security.cert.CertificateException; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.sandbox.99bill.com/gatewayapi/gatewayOrderQuery.do"; String response = ""; try { response = HttpUtil.doPostJsonRequestByHttps(JSON.toJSONString(request), reqUrl, 3000, 8000); //解析response 183-184 if(StringUtils.isNotBlank(response)){ Object detailObject = JSONObject.parseObject(response).get("orderDetail"); System.out.println("detailObject===="+detailObject); if( detailObject != null){ //把查询的Object转为JSONArray //解释orderDetail部分数据,本身是一个数组被放在了json中 ///我们将得到的detailObject对象转为json的数组形式 JSONArray array = (JSONArray)detailObject; //取出json数组的第一个元素 184 JSONObject detailJsonObject = array.getJSONObject(0); if( detailJsonObject != null){ //处理充值结果,和异步通知一样 184 int result = rechargeService.handleKQNotify( detailJsonObject.getString("orderId"),//订单号 detailJsonObject.getString("payAmount"),//实付金额 detailJsonObject.getString("payResult")//支付结果 ); System.out.println("处理的订单号是:"+orderId+",处理结果:"+result); } } } //删除redis中的订单 184 stringRedisTemplate.boundZSetOps(RedisKey.KEY_ORDERID_SET).remove(orderId); } catch (Exception e) { e.printStackTrace(); return; } }

2.2控制controller183

KuaiQianController

micr-pay

//补单操作 183 //从定时任务,调用接口 183 @GetMapping("/rece/query") @ResponseBody public String queryKQOrder(){ kQService.handlerQueryOrder(); return "接收了查询的请求"; }

2.3在定时任务中掉用184

TaskManager184

micr-task

//调用查询补单接口 184 @Scheduled(cron = "0 0/20 * * * ?")//每隔20分钟查询一次 public void invokeKuaiQianQuery(){ try { String url = "localhost:9000/pay/kq/rece/query"; HttpClientUtils.doGet(url); }catch (Exception e){ e.printStackTrace(); } }

启动类184

micr-task

2.4测试185

为了方便测试我们从数据库中拷贝一个已经处理过的订单

将订单号拷贝进redis

启动micr-datasevice、micr-web、micr-task、debug启动micr-pay

运行ngrok内网穿透

启动redis

启动zookeeper

在程序遍历第一个订单时也就是红框,因为这个数据没有向快钱发起过支付请求,所以补单查询响应回来的数据orderDetail为空

当遍历到尾号819时,因为这个订单号是之前处理的,所以

处理结果为3证明已经处理过了,所以即便是orderDetail有数据,也不会处理

看看redis,存储订单的redis消失了,成功(因为我们程序设计的即使从redis去一个进行查询补单,就删除一个)

看看数据库819数据没有任何影响

资金表,资金也没有变化,成功

支付功能3具体有哪些特色和优势,能详细介绍一下吗?

至此,本项目完结

3.总结186

4.项目总体测试

4.1启动redis

4.2启动zookeeper

4.3首先启动micr-dataservice、micr-web、micr-pay

4.4启动内网穿透

(注意自己内网穿透使用的地址,要注意内网过期,过期的话就不要使用内网穿透了,去程序汇中修改KuaiQianService类的generateFormData的bgUrl属性就是了)

4.5启动前端

4.6测试

浏览器输入localhost:8080/

后续测试不在演示