手順説明
1.まずアリの金のドレスデベロッパーセンターにアクセスしてください https://openhome.alipay.com/platform/home.htm 登録商人のアカウント。
2.開発者の認証、および公開鍵、私的使用RSARSA署名検証チェックツールを生成します。
導入頼るcom.alipay.sdk 3.pomプロファイル。
4.アクセスガイドサンドボックス環境(サンドボックスのテスト環境であるとして、携帯電話の支払いを使用してスキャンコードもアリペイAPPのサンドボックスバージョンをダウンロードする必要があります)。
支払インターフェースの開発と5.Alipayの設定クラス。
まず、RSAキー
マーチャントアカウント言っているではあまりない開発者を登録し、認定を受け、私たちは次のBaiduすることができ、それは、スキャンコードをログに記録するPayPalアカウントまたはアカウントを使用して、個人情報を改善し、サービスの種類を選択することです(この人は自習です)、登録後にレビューのために1時間を待つ必要があり、
しかし、サンドボックステスト環境の使用には影響しません、RSAキー生成の公式リンクを生成するには、以下の写真があります。
主要文書の公式ウェブサイトの生成:https://docs.open.alipay.com/291/105971
公式文書は非常に詳細に話す、あなたは、公開鍵と秘密鍵、使用するには、次の必要性を保つために覚えている手順に従うことができます。
二、com.alipay.sdk依存紹介
<依存性> <のgroupId> com.alipay.sdk </のgroupId> <たartifactId> Alipayの-SDK-Javaの</たartifactId> <バージョン> 3.0.0 </バージョン> </依存>
第三に、アプリケーションサンドボックス環境
クリックしてログインします開発センターR&Dサービスを選択します。
2.情報次の図は、アプリケーションサンドボックスを示してい
サンドボックスバージョンAPPダウンロード
3.サンドボックステストアカウントのログイン情報は、以下の仮想口座の残高を充電して自由です。
第四に、インターフェースの開発
1.在config文件下创建AlipayConfig配置类。
package com.app.config; import java.io.FileWriter; import java.io.IOException; /** * Created on 2019-9-09 */ public class AlipayConfig { // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号,开发时使用沙箱提供的APPID,生产环境改成自己的APPID public static String APP_ID = "你的沙箱APPID"; //测试 // 商户私钥,您的PKCS8格式RSA2私钥 public static String APP_PRIVATE_KEY = "在上面第一步生成的RSA私钥"; // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。 public static String ALIPAY_PUBLIC_KEY = "在沙箱应用中对应的支付宝公钥"; // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 public static String notify_url = "http://localhost:8080/Alipay/notifyUrl"; // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问(其实就是支付成功后返回的页面) public static String return_url = "http://localhost:8080/Alipay/returnUrl"; // 签名方式 public static String sign_type = "RSA2"; // 字符编码格式 public static String CHARSET = "UTF-8"; // 支付宝网关,这是沙箱的网关 public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do"; //测试 // 支付宝网关 public static String log_path = "E:\\"; /** * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) * @param sWord 要写入日志里的文本内容 */ public static void logResult(String sWord) { FileWriter writer = null; try { writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis() + ".txt"); writer.write(sWord); } catch (Exception e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
2.后台代码
package com.app.controller; import com.alipay.api.AlipayApiException; import com.alipay.api.AlipayClient; import com.alipay.api.DefaultAlipayClient; import com.alipay.api.internal.util.AlipaySignature; import com.alipay.api.request.AlipayTradePagePayRequest; import com.app.config.AlipayConfig; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * Created by on 2019-9-09. */ @Controller @RequestMapping(value="/Alipay") public class AlipayController { /** * 购物车 * * @return */ @RequestMapping(value = "/Shopcart") public String Shopcart() { return "pay"; } /** * 结算界面 * @return */ @ResponseBody @RequestMapping(value = "/PayPage") public String payController (HttpServletRequest request, HttpServletResponse response) throws IOException { //获得初始化的AlipayClient AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.sign_type); //设置请求参数 AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest(); alipayRequest.setReturnUrl(AlipayConfig.return_url); alipayRequest.setNotifyUrl(AlipayConfig.notify_url); //商户订单号,商户网站订单系统中唯一订单号,必填 String out_trade_no = request.getParameter("Order"); //付款金额,必填 ShopName String total_amount = request.getParameter("Money"); //订单名称,必填 String subject = request.getParameter("Name"); //商品描述,可空 String body =request.getParameter("购物测试"); // 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。 String timeout_express = "1c"; alipayRequest.setBizContent("{\"out_trade_no\":\"" + out_trade_no + "\"," + "\"total_amount\":\"" + total_amount + "\"," + "\"subject\":\"" + subject + "\"," + "\"body\":\"" + body + "\"," + "\"timeout_express\":\""+ timeout_express +"\"," + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}"); //请求 String url = ""; try { url = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单 /* response.setContentType("text/html;charset=" + AlipayConfig.CHARSET); response.getWriter().write(url); // 直接将完整的表单html输出到页面 response.getWriter().flush(); response.getWriter().close();*/ } catch (AlipayApiException e) { e.printStackTrace(); } System.out.println(url); return url; } /** * 同步跳转 * * @param request * @throws Exception */ @ResponseBody @RequestMapping("/returnUrl") public ModelAndView returnUrl(HttpServletRequest request) throws Exception { ModelAndView mav = new ModelAndView(); // 获取支付宝GET过来反馈信息(官方固定代码) 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 = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } params.put(name, valueStr); } boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); // 调用SDK验证签名 // 返回界面 if (signVerified) { System.out.println("前往支付成功页面"); mav.setViewName("Shopcart"); } else { System.out.println("前往支付失败页面"); mav.setViewName("failReturn"); } return mav; } /** * 支付宝服务器异步通知 * * @param request * @throws Exception */ @ResponseBody @RequestMapping("/notifyUrl") public void notifyUrl(HttpServletRequest request) throws Exception { // 获取支付宝GET过来反馈信息 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 = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } params.put(name, valueStr); } boolean signVerified = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET, AlipayConfig.sign_type); // 调用SDK验证签名 if (signVerified) { // 验证成功 更新订单信息 System.out.println("异步通知成功"); // 商户订单号 String out_trade_no = request.getParameter("out_trade_no"); // 交易状态 String trade_status = request.getParameter("trade_status"); // 修改数据库 } else { System.out.println("异步通知失败"); } } }
3.前台页面html(页面比较lo,大家测试做个参考)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>沙箱下单测试</title> </head> <body> <div> <form action="http://localhost:8080/Alipay/PayPage" method="post"> <div> 订单号:<input name="Order" value="20592155879901" ></input> </div> <div> 商品名称:<input name="Name" value="笔记本电脑"></input> </div> <div> 金额: <入力名= "お金"値= "99.99"> </入力> 元 </ DIV> の<input type = "提出"値= "提交订单"> </入力> </ FORM> </ div> </ BODY> </ HTML>
4.試験結果
Webページを入力します。locahost:8080 /アリペイ/によってShopCart
自動的に決済注文インターフェース、アリペイAPPスキャン支払いの可能なサンドボックス版にジャンプします提出をクリックした後、支払も、直接ログインすることができます
サンドボックス効果の支払い口座
あなたが正式な環境が必要な場合は、唯一のライン上の正式なAPPID、および正式なAlipayのゲートウェイを交換する必要が.......
それが正式に署名した事業者登録とアップロードに必要なビジネスライセンスを持っているようだ。しかし、あなたは、次のテストに興味がある可能性があり...