当前位置: 首页 > news >正文

企业建站划算吗365网站

企业建站划算吗,365网站,苏州cms模板建站宝,北京哪个公司做网站目录 引出git代码仓库准备工作支付宝沙箱api内网穿透 [natapp.cn](https://natapp.cn/#download) springboot整合—极简实现版1.导包配置文件2.controller层代码3.进行支付流程4.支付成功回调 依赖注入的改进1.整体结构2.pom.xml文件依赖3.配置文件4.配置类#xff0c;依赖注入… 目录 引出git代码仓库准备工作支付宝沙箱api内网穿透 [natapp.cn](https://natapp.cn/#download) springboot整合—极简实现版1.导包配置文件2.controller层代码3.进行支付流程4.支付成功回调 依赖注入的改进1.整体结构2.pom.xml文件依赖3.配置文件4.配置类依赖注入5.支付商品id价格名称6.controller层进行支付和回调7.主启动类 总结 引出 1.springboot整合支付宝沙箱支付 2.准备工作沙箱api内网穿透 3.极简实现理解支付异步回调等 4.按照spring依赖注入的思想改造基础demo git代码仓库 https://gitee.com/pet365/springboot-alipay 准备工作 支付宝沙箱api 支付宝开放平台 (alipay.com) 支付参数 内网穿透 natapp.cn natapp.cn官网 启动和配置 springboot整合—极简实现版 1.导包配置文件 !-- 支付宝相关--dependencygroupIdcom.alipay.sdk/groupIdartifactIdalipay-sdk-java/artifactIdversion4.34.0.ALL/version/dependencyserver:port: 9090# 日志需要配置一下 Slf4j logging:level:com.tianju.alipay: debug2.controller层代码 订单ID需要唯一价格物品名称支付主题 http://localhost:9090/api/ali/pay?orderId202307302321price12.56subjectiPhone 用户名flrnht7304sandbox.com 密码111111 AliPayController.java文件 package com.tianju.alipay.controller;import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.domain.AlipayTradePagePayModel; import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipayTradePagePayRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Set;/*** 支付宝的支付接口* 用户名flrnht7304sandbox.com* 密码111111*/// http://localhost:9090/api/ali/pay?orderId202307302321price12.56subjectiPhone RestController RequestMapping(/api/ali) Slf4j // tips如果用debug记得在application.yml文件中配置一下日志级别 public class AliPayController {String alipayPublicKey ;GetMapping(/pay)public void payOrder(String orderId, String price, String subject, HttpServletResponse httpResponse) throws AlipayApiException, IOException {// 1.准备需要的参数私匙支付公匙appid沙箱支付平台的urlString privateKey ;String alipayPublicKey ;String appId 9021000123613164;String serverUrl https://openapi-sandbox.dl.alipaydev.com/gateway.do;// 2.把需要配置的参数set进AlipayConfig类中com.alipay.api.AlipayConfig alipayConfig new com.alipay.api.AlipayConfig();alipayConfig.setServerUrl(serverUrl);alipayConfig.setAppId(appId);alipayConfig.setPrivateKey(privateKey);alipayConfig.setFormat(json);alipayConfig.setAlipayPublicKey(alipayPublicKey);alipayConfig.setCharset(UTF8);alipayConfig.setSignType(RSA2);// 3.创建支付宝的默认的客户端AlipayClient alipayClient new DefaultAlipayClient(alipayConfig);// 4.准备支付的参数包括需要支付的订单的id价格物品名称AlipayTradePagePayModel model new AlipayTradePagePayModel(); // model.setOutTradeNo(2023073022083620);model.setOutTradeNo(orderId); // 需要支付的订单id自定义的订单id不能重复唯一已经支付的无法继续支付model.setTotalAmount(price); // 需要支付的钱 model.setTotalAmount(88.88);model.setSubject(subject); // 要支付的物品比如 model.setSubject(Iphone6 16G);model.setProductCode(FAST_INSTANT_TRADE_PAY);// 5.创建支付的请求把上面的准备支付的参数进行setAlipayTradePagePayRequest request new AlipayTradePagePayRequest();request.setBizModel(model);/*** 设置支付宝异步回调这个需要用内网穿透*/request.setNotifyUrl(http://uw7ayu.natappfree.cc/api/ali/notify);/*** 设置支付宝支付成功返回的页面* 这里让支付成功直接回到static下的一个静态页面中*/request.setReturnUrl(http://localhost:9090/aliPayReturn.html);// 6.调用ali客户端alipayClient用客户端执行请求获取响应获取.getBody()拿到form表单// 执行请求拿到响应的结果返回给浏览器String form ;try {form alipayClient.pageExecute(request).getBody(); // 调用SDK生成表单log.debug(getAliPayFrom);System.out.println(getAliPayFrom);System.out.println(form);} catch (AlipayApiException e) {e.printStackTrace();}// 表单数据作为响应返回给前端显示前端页面/*** form namepunchout_form methodpost actionhttps://openapi-sandbox.dl.alipaydev.com/gateway.do?charsetUTF8methodalipay.trade.page.paysignZSYIysQXMlJK6q%2B%2BQVJVhKi3qtHBaXTMmh4%2Fi7Wcj1OuSr5Qs6X%2Fhq0jgDbR%2BFw6da3fO5Hov8iV8%2BPo07CVnIQDSL1X2WDZzSN3Srqid%2BLKP%2BnoME2Jv9AfhaPwYkbElg0x40pLspkCv7%2FeRs93ROkrvLUL0aTA%2B7wXrIe5FKkvptqfqjReMayVR1lKmiGw8SWToNJ0OQoDp4g6191vJIy9ld%2BQfRU6PLq9dUH3XIifNvCwOceMCqpOXNlJIAb8MC2FkXK%2FCwEij5mj%2BpqNEevMf0DRczuUklJe20FeXrx6bSsjEIly8Swt1j4UYZZJY817TRQp%2FG3XEOjnLfAH5g%3D%3Dversion1.0app_id9021000123613164sign_typeRSA2timestamp2023-07-3023%3A11%3A17alipay_sdkalipay-sdk-java-dynamicVersionNoformatjson* input typehidden namebiz_content value{quot;out_trade_noquot;:quot;202307302206quot;,quot;product_codequot;:quot;FAST_INSTANT_TRADE_PAYquot;,quot;subjectquot;:quot;iPhonequot;,quot;total_amountquot;:quot;12.56quot;}* input typesubmit value立即支付 styledisplay:none * /form* scriptdocument.forms[0].submit();/script*/httpResponse.setContentType(text/html;charsetUTF-8); // 设置头部httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面httpResponse.getWriter().flush();httpResponse.getWriter().close();}/*** 支付宝异步回调* request.setNotifyUrl();* http://localhost:9090/api/ali/notify* 上面这个网址用内网穿透代理一下* http://jqdxgm.natappfree.cc/api/ali/notify* 此时支付宝就能回调到这个页面*/PostMapping(/notify)public void aliPayNotify(HttpServletRequest request) throws AlipayApiException {log.debug(支付宝异步回调);MapString, String[] parameterMap request.getParameterMap();// [gmt_create, charset, gmt_payment, notify_time, subject, sign, buyer_id, invoice_amount, version, notify_id,// fund_bill_list, notify_type, out_trade_no, total_amount, trade_status, trade_no, auth_app_id, receipt_amount,// point_amount, buyer_pay_amount, app_id, sign_type, seller_id]SetString keySet parameterMap.keySet(); // 获取http请求里面的所有键/*** paramsMap如下* {gmt_create2023-07-31 15:54:11, charsetUTF8,* gmt_payment2023-07-31 15:54:26,* notify_time2023-07-31 15:54:27,* signfsCABNzc5hax4mwwMULluDiEAT70Kqj77uTMcCgSi82AU6tP5LGbXucEvP7CbvjXrYo5g3hrz5xRQAwddE7qU9Qyrg0v3EnearJBcW4It6NVNBQ7yfY/W79eKRSKspLBKHRa21RILjyRrmQYG4Cw8R7twP7y0lDCOE8j3rV6ZyGfhiQ7EXp49d6HpgcIT1NjgJjQYSyJFdgyqkzFljKRfbhwPFAtubsmd8IcJCU7XI3YosSKnDhQaCA6ec4dmQiWtvcTbOLNR/r2Sou7rCnI7s1lc8pKeEsuacWTZW2FVR7hdHoLZ/expaRQItdNzA86lwQxu3SRCQ9wNTPICv1A,* buyer_id2088722005286475, invoice_amount12.56, version1.0, notify_id2023073101222155427086470500776505,* fund_bill_list[{amount:12.56,fundChannel:ALIPAYACCOUNT}],* notify_typetrade_status_sync,* subjectiPhone, // 物品名称* out_trade_no202307311553, // 进行支付的订单id唯一商家自定义即支付时传入的 String orderId* total_amount12.56, // 总价格* trade_statusTRADE_SUCCESS, // 支付状态* trade_no2023073122001486470500697216, auth_app_id9021000123613164,* receipt_amount12.56, point_amount0.00,* buyer_pay_amount12.56, app_id9021000123613164, sign_typeRSA2, seller_id2088721005318559}*/MapString,String paramsMap new HashMap(); // 专门用来放置请求里面的参数for(String key : keySet){paramsMap.put(key, request.getParameter(key));}System.out.println(*************);System.out.println(paramsMap);// 验证签名String sign paramsMap.get(sign);String contentV1 AlipaySignature.getSignCheckContentV1(paramsMap);boolean rsa256CheckSignature AlipaySignature.rsa256CheckContent(contentV1, sign, alipayPublicKey, UTF-8);if (rsa256CheckSignature TRADE_SUCCESS.equals(paramsMap.get(trade_status))){// 签名验证成功 并且 支付宝回调的状态是成功状态 TRADE_SUCCESSlog.info(在{}买家{}进行订单{}的付款交易名称{}付款金额{},paramsMap.get(gmt_payment),paramsMap.get(buyer_id),paramsMap.get(out_trade_no),paramsMap.get(subject),paramsMap.get(total_amount));// 支付成功修改数据库中该订单的状态// 比如流程根据订单ID查询出一条数据修改该条订单的数据或者只有支付成功才给数据库里面新增一条数据}} }3.进行支付流程 支付密码输入 支付成功 4.支付成功回调 设置异步回调 启动内网穿透 设置地址 异步回调流程解析 支付宝支付成功跳转 跳转成功 依赖注入的改进 1.整体结构 2.pom.xml文件依赖 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersiongroupIdcom.tianju.alipay/groupIdartifactIdspringboot-alipay/artifactIdversion1.0-SNAPSHOT/versionpropertiesmaven.compiler.source8/maven.compiler.sourcemaven.compiler.target8/maven.compiler.targetproject.build.sourceEncodingUTF-8/project.build.sourceEncoding/propertiesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.5.4/versionrelativePath/ !-- lookup parent from repository --/parentdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependency!--json工具--dependencygroupIdcom.alibaba/groupIdartifactIdfastjson/artifactIdversion2.0.12/version/dependencydependencygroupIdjunit/groupIdartifactIdjunit/artifactIdscopetest/scope/dependency!-- 支付宝相关--dependencygroupIdcom.alipay.sdk/groupIdartifactIdalipay-sdk-java/artifactIdversion4.34.0.ALL/version/dependency/dependencies /project3.配置文件 applicaiton.yml server:port: 9090# 日志需要配置一下 Slf4j logging:level:com.tianju.alipay: debugalipay.properties ali.privateKey ali.alipayPublicKey ali.appId 9021000123613164 ali.serverUrl https://openapi-sandbox.dl.alipaydev.com/gateway.doali.returnUrl http://localhost:9090/aliPayReturn.html ali.notifyUrl http://uw7ayu.natappfree.cc/api/ali/notify4.配置类依赖注入 package com.tianju.alipay.config;import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import lombok.Getter; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource;Configuration PropertySource(classpath:config/alipay.properties) Getter public class AlipayConfig {Value(${ali.serverUrl})private String serverUrl;Value(${ali.appId})private String appId;Value(${ali.alipayPublicKey})private String alipayPublicKey;Value(${ali.privateKey})private String privateKey;Beanpublic AlipayClient alipayClient() throws AlipayApiException {// 2.把需要配置的参数set进AlipayConfig类中com.alipay.api.AlipayConfig alipayConfig new com.alipay.api.AlipayConfig();alipayConfig.setServerUrl(serverUrl);alipayConfig.setAppId(appId);alipayConfig.setPrivateKey(privateKey);alipayConfig.setFormat(json);alipayConfig.setAlipayPublicKey(alipayPublicKey);alipayConfig.setCharset(UTF8);alipayConfig.setSignType(RSA2);return new DefaultAlipayClient(alipayConfig);} }5.支付商品id价格名称 package com.tianju.alipay.entity;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data NoArgsConstructor AllArgsConstructor public class Alipay {private String orderId; // 商家自定义的订单编号唯一private String price; // 商品价格private String subject; // 支付主题 } 6.controller层进行支付和回调 package com.tianju.alipay.controller;import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.domain.AlipayTradePagePayModel; import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipayTradePagePayRequest; import com.tianju.alipay.entity.Alipay; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Map; import java.util.Set;/*** 支付宝的支付接口* 用户名flrnht7304sandbox.com* 密码111111*/// http://localhost:9090/api/ali/pay?orderId202307302321price12.56subjectiPhone RestController RequestMapping(/api/ali) Slf4j public class AliPayController {Autowiredprivate AlipayClient alipayClient;Value(${ali.alipayPublicKey})private String alipayPublicKey;Value(${ali.returnUrl})private String returnUrl; // 支付成功返回的页面Value(${ali.notifyUrl})private String notifyUrl; // 支付宝支付成功异步回调的页面需要内网穿透GetMapping(/pay)public void payOrder(Alipay alipay, HttpServletResponse httpResponse) throws IOException {// 4.准备支付的参数包括需要支付的订单的id价格物品名称AlipayTradePagePayModel model new AlipayTradePagePayModel();model.setOutTradeNo(alipay.getOrderId()); // 需要支付的订单id自定义的订单id不能重复唯一已经支付的无法继续支付model.setTotalAmount(alipay.getPrice()); // 需要支付的钱 model.setTotalAmount(88.88);model.setSubject(alipay.getSubject()); // 要支付的物品比如 model.setSubject(Iphone6 16G);model.setProductCode(FAST_INSTANT_TRADE_PAY);// 5.创建支付的请求把上面的准备支付的参数进行setAlipayTradePagePayRequest request new AlipayTradePagePayRequest();request.setBizModel(model);/*** 设置支付宝异步回调这个需要用内网穿透*/request.setNotifyUrl(notifyUrl);/*** 设置支付宝支付成功返回的页面* 这里让支付成功直接回到static下的一个静态页面中*/request.setReturnUrl(returnUrl);// 6.调用ali客户端alipayClient用客户端执行请求获取响应获取.getBody()拿到form表单// 执行请求拿到响应的结果返回给浏览器String form ;try {form alipayClient.pageExecute(request).getBody(); // 调用SDK生成表单log.debug(getAliPayFrom);System.out.println(getAliPayFrom);System.out.println(form);} catch (AlipayApiException e) {e.printStackTrace();}// 表单数据作为响应返回给前端显示前端页面httpResponse.setContentType(text/html;charsetUTF-8); // 设置头部httpResponse.getWriter().write(form);// 直接将完整的表单html输出到页面httpResponse.getWriter().flush();httpResponse.getWriter().close();}/*** 支付宝异步回调* request.setNotifyUrl();* http://localhost:9090/api/ali/notify* 上面这个网址用内网穿透代理一下* http://jqdxgm.natappfree.cc/api/ali/notify* 此时支付宝就能回调到这个页面*/PostMapping(/notify)public void aliPayNotify(HttpServletRequest request) throws AlipayApiException {log.debug(支付宝异步回调);MapString, String[] parameterMap request.getParameterMap();SetString keySet parameterMap.keySet(); // 获取http请求里面的所有键/*** paramsMap如下* {gmt_create2023-07-31 15:54:11, charsetUTF8,* gmt_payment2023-07-31 15:54:26,* notify_time2023-07-31 15:54:27,* signfsCABNzc5hax4mwwMULluDiEAT70Kqj77uTMcCgSi82AU6tP5LGbXucEvP7CbvjXrYo5g3hrz5xRQAwddE7qU9Qyrg0v3EnearJBcW4It6NVNBQ7yfY/W79eKRSKspLBKHRa21RILjyRrmQYG4Cw8R7twP7y0lDCOE8j3rV6ZyGfhiQ7EXp49d6HpgcIT1NjgJjQYSyJFdgyqkzFljKRfbhwPFAtubsmd8IcJCU7XI3YosSKnDhQaCA6ec4dmQiWtvcTbOLNR/r2Sou7rCnI7s1lc8pKeEsuacWTZW2FVR7hdHoLZ/expaRQItdNzA86lwQxu3SRCQ9wNTPICv1A,* buyer_id2088722005286475, invoice_amount12.56, version1.0, notify_id2023073101222155427086470500776505,* fund_bill_list[{amount:12.56,fundChannel:ALIPAYACCOUNT}],* notify_typetrade_status_sync,* subjectiPhone, // 物品名称* out_trade_no202307311553, // 进行支付的订单id唯一商家自定义即支付时传入的 String orderId* total_amount12.56, // 总价格* trade_statusTRADE_SUCCESS, // 支付状态* trade_no2023073122001486470500697216, auth_app_id9021000123613164,* receipt_amount12.56, point_amount0.00,* buyer_pay_amount12.56, app_id9021000123613164, sign_typeRSA2, seller_id2088721005318559}*/MapString,String paramsMap new HashMap(); // 专门用来放置请求里面的参数for(String key : keySet){paramsMap.put(key, request.getParameter(key));}System.out.println(*************);System.out.println(paramsMap);// 验证签名String sign paramsMap.get(sign);String contentV1 AlipaySignature.getSignCheckContentV1(paramsMap);boolean rsa256CheckSignature AlipaySignature.rsa256CheckContent(contentV1, sign, alipayPublicKey, UTF-8);if (rsa256CheckSignature TRADE_SUCCESS.equals(paramsMap.get(trade_status))){// 签名验证成功 并且 支付宝回调的状态是成功状态 TRADE_SUCCESSlog.info(在{}买家{}进行订单{}的付款交易名称{}付款金额{},paramsMap.get(gmt_payment),paramsMap.get(buyer_id),paramsMap.get(out_trade_no),paramsMap.get(subject),paramsMap.get(total_amount));// 支付成功修改数据库中该订单的状态// 比如流程根据订单ID查询出一条数据修改该条订单的数据或者只有支付成功才给数据库里面新增一条数据}} }7.主启动类 package com.tianju.alipay;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication public class AliPayApp {public static void main(String[] args) {SpringApplication.run(AliPayApp.class, args);} }总结 1.springboot整合支付宝沙箱支付 2.准备工作沙箱api内网穿透 3.极简实现理解支付异步回调等 4.按照spring依赖注入的思想改造基础demo
http://www.dnsts.com.cn/news/260088.html

相关文章:

  • 那个网站详情页做的好做影视网站违法莫
  • 专业网站设计 网络服务专业手机建站价格
  • php网站投票源码网站建设销售一个月开几个单
  • 网站项目团队介绍找外贸客户的网站
  • 金融投资公司网站建设论文卡点视频免费制作软件
  • 抚州制作网站哪家公司好大连开发区一中
  • 保定制作公司网站的公司青岛百度网站排名优化
  • 陕西高端品牌网站建设返利网站开发计划书
  • 餐饮团购网站建设东莞网站建设技术支持
  • 山东省建设工程质量监督总站网站赣州做网站推广
  • 苏州网站建设品牌网站建站网站80s隐秘而伟大
  • 网站建设和app哪个好本地的番禺网站建设
  • 专业做数据的网站有哪些方面平台公司代理注册
  • 个人网站有什么缺点竞价托管推广代运营
  • 衡阳市城乡建设协会官方网站世界500强企业名录
  • 代做毕业设计网站 道路桥梁天河建设网站开发
  • ks2e做网站wordpress电子商务主题 中文
  • 开网络公司做网站挣钱吗如何查看网站的外链
  • 发布网站建设平面设计开源 企业网站
  • 上海婚纱网站设计广东十大广告公司
  • 河南省建设厅网站136号文件wordpress深度优化主题
  • 陆金所网站开发二部重庆企业做网站
  • 网站建设需要掌握什么技术网页设计与制作section什么意思
  • 临海高端网站设计新感觉建站柳州做网站制作的公司有哪些
  • 网站备案授权书范本建材企业网站源码
  • 模板网站建设哪家好wordpress段子模板
  • 南京设计公司网站网站推广软件免费版
  • 门户网站建设依据做网站后期维护工资贴吧
  • 网站推广及seo方案制作会员手机网站
  • 科技网站设计案例济源企业网站建设