支付宝服务器 java_java服务器端集成支付宝

1.支付宝已经更新添加了封装好的签名方法,可以在自己的项目中直接调用进行签名,减少了自己手动签名产生的问题,主要是在进行方法调用时注意传参的要求,尤其是公钥使用的是支付宝的公钥,而不是APP的公钥

支付宝鼓励使用SDK进行签名,一般调用RSA2 进行签名,并将返回的值直接传递给前端,调用支付宝支付,举个例子:

组装参数:

AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();

model.setBody("支付宝支付");

model.setSubject("App支付测试Java");

model.setOutTradeNo(order.getOrderNumber());

model.setTimeoutExpress("30m");

model.setTotalAmount(String.valueOf(order.getPrice()));

model.setProductCode("QUICK_MSECURITY_PAY");

tring sign = creatAliPaySign(model);//调用生成签名的方法

调用签名方法,将组装好的参数传递给签名方法:

if(model!=null){

AlipayClient alipayClient = new DefaultAlipayClient( ALIPAY_URL, APP_ID,

APP_PRIVATE_KEY,ALIPAY_FORMAT, ALIPAY_CHARSET,ALIPAY_PUBLIC_KEY, SIGN_TYPE);

//实例化具体API对应的request类,类名称和接口名称对应

//当前调用接口名称:alipay.trade.app.pay

AlipayTradeAppPayRequest aliRequest = new AlipayTradeAppPayRequest();

//SDK已经封装掉了公共参数,这里只需要传入业务参数。

//以下方法为sdk的model入参方式(model和biz_content同时存在的取biz_content)。

aliRequest.setBizModel(model);

aliRequest.setNotifyUrl(NOTIFY_URL);

//这里和普通的接口调用不同,使用的是sdkExecute

try {

AlipayTradeAppPayResponse aliResponse = alipayClient.sdkExecute(aliRequest);

String sign = aliResponse.getBody();

return sign;

} catch (AlipayApiException e) {

// TODO Auto-generated catch block

e.printStackTrace();

return null;

}

}

将生成的sign值直接返回给客户端即可

2.关于异步通知:

异步通知为支付宝支付完成后,对服务器端发送的通知,客户端返回的为同步通知,我们对订单的处理需要以服务器端的信息为准.异步调用的接口需要参与签名,并通过客户端传递个支付宝,必须为无参的方法.对其发送的异步通知,需要进行验签,已确定支付的唯一性.

可以通过request 获得支付宝异步通知返回的内容:

//获取支付宝POST过来反馈信息

Map params = new HashMap();

Map requestParams = request.getParameterMap();

for (Iterator 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] + ",";

}

//乱码解决,这段代码在出现乱码时使用。

// try {

//   valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");

// } catch (UnsupportedEncodingException e) {

//   // TODO Auto-generated catch block

// e.printStackTrace();

//}

params.put(name, valueStr);

}

boolean flag = AlipaySignature.rsaCheckV1(params, getAliPayPublicKey(), "UTF-8","RSA2");

//flag=true 则为验签通过,用户可以添加自己的业务逻辑处理,并返回给支付宝服务器端success来通知其已经验签通过

3.支付宝公钥和私钥的生成,这不能算是一个坑,只因自己对此不了解,产生了误解,需要成对生成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值