Spring从零开始接入支付宝手机网页支付

前言

最近在做支付宝wap网页支付(手机端访问网页,调起手机中的支付宝APP支付),查看了官方文档也在网上找了很多资料,但感觉没有一篇比较完整的真正的从零开始接入的教程,此处总结记录一下,方便之后查阅。
参考文档:

准备工作

1、注册商家支付宝账号并进行企业实名认证 ,注册地址选择企业账户
2、准备域名主体和企业支付宝主体一致的域名;
3、签约支付接口选择手机网站支付,进行签约。
以上为正式环境准备工作,同时支付宝提供了沙箱环境用于开发测试,沙箱环境地址,这里将分别介绍沙箱环境和正式环境的集成方式(集成方式差不多)

环境配置

沙箱环境配置
1、沙箱应用配置信息

沙箱环境配置如下图,其中APPID和RSA2会在代码中配置,后续会介绍
在这里插入图片描述

2、设置RSA2

使用支付宝密钥生成器生成公钥,如下图
在这里插入图片描述

将应用公钥填入,应用私钥本地保存代码集成会使用到。

正式环境配置

正式环境配置和沙箱环境配置差不多,需要先创建应用—>选择开通的支付服务—>生成密钥并上传。

1、创建应用

在这里插入图片描述

2、添加支付能力

在这里插入图片描述
记得选择手机网站支付并签约。

3、设置RSA2加密

同沙箱环境加密设置

Spring配置

使用了IJPay,具体可查看IJPay官方文档

1、Maven引入相关依赖库
  <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>4.10.58.ALL</version>
        </dependency>
        <dependency>
            <groupId>com.github.javen205</groupId>
            <artifactId>IJPay-AliPay</artifactId>
            <version>2.6.3</version>
        </dependency>
2、Alipay相关配置

    // 商户appid
    public static String APPID = "应用AppId";
    // 私钥 pkcs8格式的
    public static String RSA_PRIVATE_KEY = "生成的应用私钥";
    // 页面跳转同步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问 商户可以自定义同步跳转地址
    public static String return_url = "";
        // 服务器异步通知页面路径 需http://或者https://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "";
    //正式环境支付宝网关地址
   // public static String URL = "https://openapi.alipay.com/gateway.do";
    //沙箱环境网关地址
   public static String URL = "https://openapi.alipaydev.com/gateway.do";
    // 编码
    public static String CHARSET = "UTF-8";
    // 返回格式
    public static String FORMAT = "json";
    // 支付宝公钥
    public static String ALIPAY_PUBLIC_KEY = "生成的应用公钥";
    // 日志记录目录
    public static String log_path = "/log";
    // RSA2
    public static String SIGNTYPE = "RSA2";

3、手机网页发起支付
@RequestMapping("/wapPay.do")
public void wapPay(HttpServletRequest request,HttpServletResponse response){

String body = "测试手机网页支付";
String subject = "测试";
String totalAmount = "0.1";
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
model.setBody(body);
model.setSubject(subject);
model.setTotalAmount(totalAmount);
model.setTimeoutExpress("1d");//有效时间
model.setOutTradeNo("");//系统内部订单ID (系统内唯一)
model.setProductCode("");//系统内产品编码

AliPayApiConfigKit.putApiConfig(queryApiPayConfig);
AliPayApi.wapPay(response,model,return_url,notify_url)

}


public AliPayApiConfig queryApiPayConfig(){
 AliPayApiConfig aliPayApiConfig;
 try{
	aliPayApiConfig = AliPayApiConfigKit.getApiConfig(APPID);
 }catch(Exception e){
  aliPayApiConfig = AliPayApiConfig.builder().setAppId(APPID).setAliPayPublicKey(ALIPAY_PUBLIC_KEY).
  setCharset("UTF-8").setPrivateKey(RSA_PRIVATE_KEY).setServiceUrl(URL).setSignType("RSA2").build();
 }
 return aliPayApiConfig;
}
4、支付结果通知监听

同步通知

@RequestMapping("/return_url")
public void aliPayReturn(HttpServletRequest request,HttpServletResponse response,AliPayReturn aliPayReturn){
	Map<String,String> map = AliPayApi.toMap(request);
	boolean verifyResult = AlipaySignature.rsaCheckV1(map,ALIPAY_PUBLIC_KEY,CHARSET,SIGNTYPE);
	if(verifyResult){ //验证通过,商户在此处加入自己的逻辑代码
	
	  }
}

异步通知

@RequestMapping("/notify_url")
public String notifyUrl(HttpServletRequest request,AliPayReturn aliPayReturn){
    Map<String,String> map = AliPayApi.toMap(request);
	boolean verifyResult = AlipaySignature.rsaCheckV1(map,ALIPAY_PUBLIC_KEY,CHARSET,SIGNTYPE);
	if(verifyResult){ //验证通过,商户在此处加入自己的逻辑代码
		
		return "success";
	 }else{
		 return "failure";
	 }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值