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是你要传递的参数可以任意定义。

经验分享 程序员 微信小程序 职场和发展