支付宝支付接口总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chenbetter1996/article/details/84315824

登陆

蚂蚁金服提供了支付的测试环境和测试商家卖家账号和卖家账号,也提供了一套demo
登陆时使用自己真实线上的支付宝,服务可选择个人自研开发。

~> 开放平台-沙箱环境

沙箱配置

在这里插入图片描述

APPID和支付宝网关都是其自动生成提供的,不需要配置,沙箱只需要在在这里配置密钥。记得用私钥签名公钥验证下其正确性。

1.只能填写和修改应用公钥,支付宝公钥会自动对应生成,两个公钥是不一样的(仅仅头尾像而已)
2.配置AlipayConfig.java的公钥属性使用的是支付宝公钥
3.这个支付宝网关都是沙箱测试环境的,真实线上环境的网关没有 dev,线上的APPID 是另外的。在创建应用时才有 快速接入文档
在这里插入图片描述

买家和卖家的测试账号
在这里插入图片描述

测试可以下载其提供的沙箱支付宝(界面功能和真实线上支付宝几乎一样,就是网关和账号是测试的而已),这样测试给钱直接扫码方便。


Demo案例解析

以下是官方提供的样例中的AlipayConfig.java配置文件
package com.alipay.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {
	
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

	// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
	public static String app_id = "2016091900549628";
	
	// 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "应用公钥对应的私钥";
	
	// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "支付宝公钥!!!!,不是应用公钥";
    
	/** 
	 * 1.服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
	 * 2.确实是必须外网可以访问,测试过了,基本是这沙箱的配置测试也需要这个可以外网访问,不然支付宝那边(猜测是网关那边处理的)异步返回找不到url。
	 * 3. 所谓异步通知,类似回调函数,就是其支付成功了会自动调用的一个页面,采用POST请求,可以获取支付订单参数,这里我改为自己写的一个测试Servlet(花生壳壳域名内网穿透)
	 */
	public static String notify_url = "http://170d491b26.iok.la/alipay.trade.page.pay-JAVA-UTF-8/PayServlet";
			

	// 支付成功后跳转到的页面,可以自定义,Get方式,可以获取到一些支付订单参数,!无需公网IP
	public static String return_url = "http://127.0.0.1:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";


	// 签名方式
	public static String sign_type = "RSA2";
	
	// 字符编码格式
	public static String charset = "utf-8";
	
	// 支付宝网关,这里是测试网关,线上网关是"https://openapi.alipay.com/gateway.do",没有dev
	public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";
	
	// 以下是日志,可以暂时不管
	.....
}

return_url

return_url是支付成功后自动跳转到的你指定页面,测试过可以不用外网访问,GET方式,可以获取用户请求。return_url.jsp也是其提供的一个样例文件,源码就是输出一下几个交易参数到http。
如下图:

在这里插入图片描述

notify_url

1.notify_url是必须要外网可以访问的(我这里采用的是花生壳内网穿透)
2.如果支付成功了支付宝网关那边会自动调用的,这个响应的url需要返回一个 “success” / “fail” 可以参照其提供的return_url.jsp
3.以下是我写的那个测试的PayServlet作为notify_url

package controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import java.util.Map;

/**
 * 测试支付功能的处理接收的异步通知回调方法
 * 
 * @author chgl16
 * @date 2018-11-20
 * @version 1.0
 */
@WebServlet("/PayServlet")
public class PayServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		System.out.println("进入doPost"); 
		String total_amount = request.getParameter("total_amount");
		System.out.println("total_amount: " + total_amount);
		Map<String, String[]> map = request.getParameterMap();
		System.out.println("输出参数集合: " + map.toString());
		response.getWriter().write("success");
		System.out.println("结束了");
	}
}

运行测试

运行index.jsp,测试付款,其会自动生成订单号

在这里插入图片描述
点击付款按钮会跳转到其提供的alipy.trade.page.pay.jsp然后在到官方的支付界面
在这里插入图片描述
这时可以使用下载的支付沙箱版支付宝扫描付款或者登陆付款,登陆的都是测试的买家账号。支付成功会有几个跳转
在这里插入图片描述
最后跳转到return_url,如下
在这里插入图片描述
支付成功后,也自动调用了notify_url,就是我定义的PayServelt
在这里插入图片描述

上线

需要申请审核,以获取

=》开发者申请中心
在这里插入图片描述

需要设置一些上线选择,然后提交审核
在这里插入图片描述

待续。。。。

猜你喜欢

转载自blog.csdn.net/chenbetter1996/article/details/84315824