支付宝ps网页扫码支付

支付宝支付:

    我进行的是扫码支付,

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>

* 的部分是各种内容特别长,就用* 代替了,返回了这些内容之后,就加载的时候跳转到了支付宝收银台了,

如果这篇文章对你有帮助,请评论下给个鼓励。

猜你喜欢

转载自blog.csdn.net/qq_30285985/article/details/80916469