javaweb实现支付宝扫码支付完整流程
javaweb实现支付宝支付完整流程
1、进入蚂蚁金服开放平台登录注册
网址为:https://openhome.alipay.com/developmentDocument.htm进入后进行注册 注册完毕后点击进入管理中心 进入后点击下面的沙箱 进入后左侧的菜单有三个选项:沙箱应用,沙箱账号,沙箱工具,三个选项的页面分别为 可以在沙箱工具页面下载测试工具:支付宝客户端沙箱版,该工具是一个App在手机上运行,和支付宝手机端差不多。我们可以使用沙箱账号界面中提供的商家,用户的账号密码登录该手机App。
2、配置接口加签方式
首先下载密钥生成工具 https://opendocs.alipay.com/open/02kipl 安装好后打开该工具打开,按照下图进行勾选 点击生成密钥即可生成相应的密钥 回到上述“沙箱应用”界面 我选的是系统默认密钥,公钥模式 将自己生成的密钥按照要求填入
3、下载支付demo
下载网址:https://docs.open.alipay.com/270/106291 下载完毕后可见是个eclipse项目 将其导入你的idea或eclipse中 更改AlipayConfig中的相关内容
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
public static String app_id = "";
// 商户私钥,您的PKCS8格式RSA2私钥
public static String merchant_private_key = "";
// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
public static String alipay_public_key = "";
// 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String notify_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";
// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
public static String return_url = "http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";
app_id 进入沙箱应用界面https://open.alipay.com/develop/sandbox/app,应用信息即可找到 merchant_private_key商户私钥,你前面生成的商户私钥。 alipay_public_key 支付宝公钥,在沙箱应用界面https://open.alipay.com/develop/sandbox/app找到开发信息,点击查看,即可找到支付宝公钥 notify_url:异步通知,进行各种业务操作,地址为你写的servlet的地址。 return_url: 同步通知界面,进行支付操作完后,跳转的页面。 注意:上述两个地址必须是外网可以正常访问的地址。 如果是内网的话可以使用一些内网穿透工具将内网IP映射成公网IP 这种工具有很多,比如花生壳等。 更改alipay.trade.page.pay.jsp页面相关值 如下
//商户订单号,商户网站订单系统中唯一订单号,必填
String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金额,必填
String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");
//订单名称,必填
String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");
//商品描述,可空
String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");
将上面的相关变量改成你的 如商户订单号out_trade_no可以用时间戳生成 付款金额total_amount自己定义如1000 订单名称subject任意
如果想向notify_url传递一些参数 可以在下面一段中
alipayRequest.setBizContent("{"out_trade_no":""+ out_trade_no +"","
+ ""total_amount":""+ total_amount +"","
+ ""subject":""+ subject +"","
+ ""body":""+ body +"","
+ ""product_code":"FAST_INSTANT_TRADE_PAY"}");
新添一行
+ ""passback_params":""+ str +"","
变为
alipayRequest.setBizContent("{"out_trade_no":""+ out_trade_no +"","
+ ""total_amount":""+ total_amount +"","
+ ""subject":""+ subject +"","
+ ""body":""+ body +"","
+ ""passback_params":""+ str +"","
+ ""product_code":"FAST_INSTANT_TRADE_PAY"}");
str是你要传递的参数可以任意定义。
