1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 支付宝统一下单接口的接入(1)

支付宝统一下单接口的接入(1)

时间:2023-05-11 03:54:06

相关推荐

支付宝统一下单接口的接入(1)

因为公司需求所以就去看了一下支付宝的支付接入,在这里记录一下,也为了加深一下印象。

首先需要进入到支付宝的开放平台根据文档配置好相应的配置。

配置依赖

<!-- /artifact/com.alipay.sdk/alipay-sdk-java --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.9.9</version></dependency>

下面就是下单的接口的代码,这里要说下最好是从数据库里面拿到你的订单信息。

有一些须要准备的参数

APPID(支付宝给的唯一id)、APP_PRIVATE_KEY(开发者秘钥通过支付宝的秘钥工具由开发者生成)、ALIPAY_PUBLIC_KEY(支付宝公钥,上传应用公钥支付宝生成的相应公钥)

public void alipay(Order order, HttpServletResponse response) {//创建一个阿里支付的客户端,所有的支付、退款、查询等等相关的请求都是由这个对象发送的AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,//支付宝的网关,/gateway.doAlipayConfig.app_id,//商户的appIdAlipayConfig.merchant_private_key,//开发者秘钥"json",//参数返回格式,只支持JSONAlipayConfig.charset,//编码格式AlipayConfig.alipay_public_key,//支付宝公钥AlipayConfig.sign_type //生成签名的加密类型); //获得初始化的AlipayClient//申请支付页面的请求对象AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();//创建API对应的request//设置同步返回的url - 用户支付完成后跳转到哪里页面 GETalipayRequest.setReturnUrl("http://localhost:8080/login");//设置异步返回的0url - 用户支付结果的通知url POSTalipayRequest.setNotifyUrl("http://localhost:8080/pay/alipaypayment");//在公共参数中设置回跳和通知地址//支付请求体alipayRequest.setBizContent("{" +" \"out_trade_no\":\""+order.getOrderId()+"\"," +//订单号" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +//这个是销售产品码这个不用改" \"total_amount\":"+order.getPrice().doubleValue()+"," +//订单价格" \"subject\":\""+order.getSubject()+"\"," +//订单标题" \"body\":\""+order.getBody()+"\"," +//订单内容//" \"timeout_express\":\"3h\"," +//订单有效期" \"extend_params\":{" +//业务扩展参数可甜可不填根据需要" \"sys_service_provider_id\":\"2088511833207846\"" +" }"+" }");//填充业务参数//生成支付的表单页面 - 一串HTML文本String form="";try {form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单AlipayTradePagePayResponse alipayTradePagePayResponse = alipayClient.pageExecute(alipayRequest);if(alipayTradePagePayResponse.isSuccess()){System.out.println("调用成功");} else {System.out.println("调用失败");}} catch (AlipayApiException e) {e.printStackTrace();}response.setContentType("text/html;charset=UTF-8" );try {response.getWriter().write(form);//直接将完整的表单html输出到页面response.getWriter().flush();response.getWriter().close();} catch (IOException e) {e.printStackTrace();}}

到这里支付宝的下单接口就完成了

这里说下我碰到的一些问题:

1、支付页面没有展示出来-----因为当时是用ajax异步直接请求支付接口的,但是因为异步会堵塞导致支付宝的页面不能异步跳转展示。(这个不知道是不是这样我是听别人说的),用form表单提交或者直接请求不通过异步是没有问题的。

2、进入之后报错

java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: IOException : algid parse error, not a sequence

这是因为你的私钥格式错了,我是使用java是需要PKCS8格式的但是公司给的是PKCS1非java格式的,后面把格式转换成java适用的PKCS8就可以了

支付异步回调处理:/weixin_45589505/article/details/105009084

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。