1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 项目对接支付宝支付 内网穿透实现监听支付宝的支付成功异步回调通知

项目对接支付宝支付 内网穿透实现监听支付宝的支付成功异步回调通知

时间:2018-07-20 22:23:56

相关推荐

项目对接支付宝支付 内网穿透实现监听支付宝的支付成功异步回调通知

调试的话使用支付宝的沙箱环境来进行调试

调试的时候因为是本地调试,没有上线的域名,无法被支付宝的异步回调请求所打到,这种情况下可以使用内网穿透来进行解决

内网穿透步骤:

内网穿透的几个常用软件

1、natapp:/ 优惠码:022B93FD(9 折)[仅限第一次使用] 2、续断:www.zhexi.tech 优惠码:SBQMEA(95 折)[仅限第一次使用] 3、花生壳:/ 我使用的是natapp,手下能进入官网进行注册,手机号登录

然后创建一个免费隧道,每个用户都有一个免费的隧道。

然后下载软件

选择对应的安装包进行安装即可,我是Windows 64位,安装完成后进行解压,解压后进入文件夹双击natapp.exe运行即可

SpringBoot项目对接沙箱支付宝流程

1、进入支付宝开放平台的沙箱应用内,将对应信息复制到项目当中

2、将对应信息放入项目当中

wusongmall.alipay.app_id=app_idwusongmall.alipay.merchant_private_key=私钥wusongmall.alipay.alipay_public_key=公钥#支付成功后,每隔几秒都会给此地址发送支付成功的消息 异步通知wusongmall.alipay.notify_url=/payed/notify#同步通知 支付成功后立马跳转的页面wusongmall.alipay.return_url=http://xxxxx

3、然后项目拉起支付宝支付即可

支付宝支付工具类

@ConfigurationProperties(prefix = "wusongmall.alipay")@Component@Datapublic class AlipayTemplate {//在支付宝创建的应用的idprivate String app_id ;// 商户私钥,您的PKCS8格式RSA2私钥private String merchant_private_key;// 支付宝公钥,查看地址:/platform/keyManage.htm 对应APPID下的支付宝公钥。private String alipay_public_key;// 服务器[异步通知]页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问// 支付宝会悄悄的给我们发送一个请求,告诉我们支付成功的信息private String notify_url;// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问//同步通知,支付成功,一般跳转到成功页private String return_url;// 签名方式private String sign_type = "RSA2";// 字符编码格式private String charset = "utf-8";//支付超时时间private String timeout = "30m";// 支付宝网关; /gateway.doprivate String gatewayUrl = "/gateway.do";public String pay(PayVo vo) throws AlipayApiException {//AlipayClient alipayClient = new DefaultAlipayClient(AlipayTemplate.gatewayUrl, AlipayTemplate.app_id, AlipayTemplate.merchant_private_key, "json", AlipayTemplate.charset, AlipayTemplate.alipay_public_key, AlipayTemplate.sign_type);//1、根据支付宝的配置生成一个支付客户端AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl,app_id, merchant_private_key, "json",charset, alipay_public_key, sign_type);//2、创建一个支付请求 //设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(return_url);alipayRequest.setNotifyUrl(notify_url);//商户订单号,商户网站订单系统中唯一订单号,必填String out_trade_no = vo.getOut_trade_no();//付款金额,必填String total_amount = vo.getTotal_amount();//订单名称,必填String subject = vo.getSubject();//商品描述,可空String body = vo.getBody();alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+ "\"total_amount\":\""+ total_amount +"\","+ "\"subject\":\""+ subject +"\","+ "\"body\":\""+ body +"\","+ "\"timeout_express\":\""+timeout+"\"," //1分钟超时时间+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");String result = alipayClient.pageExecute(alipayRequest).getBody();//会收到支付宝的响应,响应的是一个页面,只要浏览器显示这个页面,就会自动来到支付宝的收银台页面System.out.println("支付宝的响应:"+result);return result;}}

@Controllerpublic class PayWebController {@AutowiredAlipayTemplate alipayTemplate;@AutowiredOrderService orderService;@ResponseBody@GetMapping(value = "/payOrder",produces = "text/html")//产生一个html内容,而不是json(application/json)public String payOrder(@RequestParam("orderSn") String orderSn) throws AlipayApiException {PayVo payVo = orderService.getOrderPay(orderSn);String pay = alipayTemplate.pay(payVo);System.out.println(pay);return pay;}}

@Datapublic class PayVo {private String out_trade_no;private String subject;private String total_amount;private String body;}

@RequestMapping("/payed/notify")public String handleAlipayed(PayAsyncVo vo, HttpServletRequest request) throws AlipayApiException, UnsupportedEncodingException {Map<String, String[]> map = request.getParameterMap();//阿里验签方法Map<String, String> params = new HashMap<String, String>();Map<String, String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext(); ) {String name = (String) iter.next();String[] values = requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";}//乱码解决,这段代码在出现乱码时使用//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}boolean signVerified = AlipaySignature.rsaCheckV1(params, alipayTemplate.getAlipay_public_key(),alipayTemplate.getCharset(), alipayTemplate.getSign_type());if (signVerified) {System.out.println("签名验证成功...");String result = orderService.handlePayResult(vo);return result;} else {System.out.println("签名验证失败...");return "error";}}

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