支付宝支付:
我进行的是扫码支付,
1.下载java SDK https://docs.open.alipay.com/270/106291/
2.请仔细的阅读 SDK里面的readme.txt(里面导入阿里的jar,不过网上貌似没有,我自己手动导入的,maven 手动导入)
// 确保命令行跟jar 是一个路径下
// Dfile 文件地址
// DgroupId
// DartifactId 这三个表示jar坐标
// Dversion
// Dpackaging 表示jar包
mvn install:install-file -Dfile=./alipay-sdk-java20170324180803.jar
-DgroupId=com.alipay -DartifactId=sdk-java -Dversion=1.0.0 -Dpackaging=jar
然后SDK 里面有个AlipayConfig.java 这个文件
里面需要配置: appid,公钥,私钥,回调地址,通知页面等几个参数需要配置,下面会告诉地址怎么配置
回调地址,这个是自己提供的接口,通知页面是支付成功之后跳转的页面。
下面来获取appid,公钥,私钥。
首先说明下,支付宝我是用的沙箱环境,这个环境就是个测试环境,有主要功能和主要逻辑(当前沙箱支持产品请参考“沙箱支持产品列表”)。
首先进入支付宝官网:https://www.alipay.com/
进入开放平台
进入开放平台之后会让你选择入驻账号类型,我当然选择的是自研开发者,当然,如果是企业的也可以申请企业版的;
申请完成之后, 进入首页 选择 添加功能-->沙箱应用 进行添加
进入沙箱应用之后就能看到对应的appid,网关,RSA2(SHA256)密钥 ,首先appid,网关是不需要自己处理的,然后自己设置密钥,
到https://docs.open.alipay.com/291/105971 这个地址下载密钥生成器,然后根据说明生成属于自己的私钥和公钥
生成这个之后会进行验证让你对 {"a":"123"} 跟公钥进行验证,初步是认为也是在下载的这个密钥生成器这个工具里面认证,如下图,可是不知道怎么回事,我这边点击开始延签的时候老是闪退
纠结了好久,得知还有一个专门验证签名的工具, 也是阿里官方的工具
下载地址:https://os.alipayobjects.com/download/sign_tools_RSA256_win.zip
打开之后:
只需要在这里输入私钥,即可生成签名,然后跟网页进行对比即可;
到这里已经成功获取了 appid,公钥,私钥
参数配置完成之后,现在可以进行支付了。请到这个地址大概看一看扫码支付的参数说明
https://docs.open.alipay.com/270/alipay.trade.page.pay
然后在下面有java的demo,那就毫不客气的复制过来了。
跟着一步步的配置,越来越感觉疑惑,支付宝支付是跳转页面,然而配置了半天,一直不知道在哪里跳转页面呢,答案就在统一下单支付的demo里面,
import com.alipay.api.*;
import com.alipay.api.request.*;
public void doPost(HttpServletRequest httpRequest,
HttpServletResponse httpResponse) throws ServletException, IOException {
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY, SIGN_TYPE); //获得初始化的AlipayClient
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();//创建API对应的request
alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
alipayRequest.setBizContent("{" +
" \"out_trade_no\":\"20150320010101001\"," +
" \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
" \"total_amount\":88.88," +
" \"subject\":\"Iphone6 16G\"," +
" \"body\":\"Iphone6 16G\"," +
" \"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\"," +
" \"extend_params\":{" +
" \"sys_service_provider_id\":\"2088511833207846\"" +
" }"+
" }");//填充业务参数
String form="";
try {
form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单
} catch (AlipayApiException e) {
e.printStackTrace();
}
httpResponse.setContentType("text/html;charset=" + CHARSET);
httpResponse.getWriter().write(form);//直接将完整的表单html输出到页面
httpResponse.getWriter().flush();
httpResponse.getWriter().close();
}
这个demo 是输出了html页面,这个是重点,然而,这个demo输出了这些
<form name="punchout_form" method="post" action="https://openapi.alipaydev.com/gateway.do?charset=utf**************************************************************************************************************************">
<input type="hidden" name="biz_content" value="{ *************************************************************************************">
<input type="submit" value="绔嬪嵆鏀粯" style="display:none" >
</form>
<script>document.forms[0].submit();</script>
* 的部分是各种内容特别长,就用* 代替了,返回了这些内容之后,就加载的时候跳转到了支付宝收银台了,
如果这篇文章对你有帮助,请评论下给个鼓励。