支付宝支付接口的使用

首先当然是将支付宝封装好的接口的jar包导入到项目当中,文件地址
http://download.youkuaiyun.com/detail/chenyidong521/9878819
这里写图片描述
支付宝提供了沙箱模式,可以在开发的时候通过假的账号密码来进行测试,这点比微信好多了。并且支付宝的支付接口使用起来比微信简单很多。这纯属个人感觉,还希望有人能指点微信支付的接口的时候。

支付宝支付前期配置

下面我们到支付宝的支付接口网站https://openhome.alipay.com/
登陆后点击首页可以看到如下
页面
点击左面的加号看到弹出下面窗口
可以看到有沙箱应用,沙箱账号,沙箱工具。接下来的测试都是使用沙箱 来完成的,点击加号添加到自己的工具中。
然后点击沙箱应用,在跳转的页面申请沙箱应用,具体细节按照提示完成即可 ,沙箱应用页面申请完成之后填写相应的数据
这里写图片描述
只需要填写必看部分即可,填写RSA2就不用填写RSA了 填写的数据需要我们使用一个工具来完成,也是支付宝提供的,在上面的链接中都有。
这里写图片描述
使用bat文件打开工具
这里写图片描述
按照图中的样式选中,然后点击生成密钥,密钥分成公钥和私钥。
这里的公钥是在支付宝网站中设置应用使用,密钥是在我们java程序中配置支付参数的时候使用,所以都要保留。
上面生成的公钥我们复制下来
RSA2(SHA256)密钥(推荐)
中
点击查看应用公钥,将用具生成的应用公钥粘贴进去
这里写图片描述
完成后,页面中的查看支付宝公钥也会自动生成,在后面会使用。
然后就配置完成了。现在我们在点击页面左侧菜单中的沙箱账号,
这里写图片描述
可以看到给了我们一个商家账号,一个买家账号。下面的所有支付过程都要使用这两个账号来完成。到此网站上的设置就完成了。

java程序中进行开发

将jar包导入到项目中后,我们需要创建一个配置类

package com.yssoft.fs.supervise.web.test;


import org.springframework.stereotype.Component;

import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;

/**
 * 支付配置类
 * @author cheny
 *
 */
@Component
public class TestPayConfiguration {

    /** API调用客户端 */
    private static AlipayClient alipayClient;


    public static AlipayClient success(){
        //服务地址测试都使用这个不用改
        String serverUrl="https://openapi.alipaydev.com/gateway.do";
        //appId需要申请,在我们上面中有说到申请应用,
        String appId="2016080700185726";
        //企业的密钥
        String privateKey="就是我们上面使用工具生成的密钥";
        //数据传输方式
        String format="json";
        //编码形式
        String charset="utf-8";
        //支付宝公钥
        String alipayPulicKey="配置完成公钥后生成的支付宝公钥";
        //编码方式
        String signType="RSA2";
        //初始化方法
        if(alipayClient==null){
            alipayClient = new DefaultAlipayClient(serverUrl, appId, privateKey, format, charset, alipayPulicKey, signType);
        }
        return alipayClient;
    }

}

配置类是进行初始化支付宝接口的。当我们要进行支付的时候,就先调用类中的success方法得到AlipayClient对象,然后使用他来和支付宝通信 。
支付具体操作的流程如下
这个类中使用了手机端html网站支付,pc端html网站支付,还有商家向客户转账的支付三种。可以访问相应的方法来完成支付。

package com.yssoft.fs.supervise.web.test;

import java.io.IOException;

import javax.annotation.Resource;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayFundTransToaccountTransferRequest;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;

/**
 * 支付处理控制器
 * @author cheny
 *
 */
@Controller
@RequestMapping("/pay")
public class TestController {

    @Resource
    private TestPayConfiguration testPayConfiguration;

    @RequestMapping("/test1")
    public String test1(){

        return "test/testPay";
    }
    /**
     * pc端付款
     * @param httpRequest
     * @param httpResponse
     * @throws ServletException
     * @throws IOException
     * @throws AlipayApiException
     */
    @RequestMapping("/testPay")
    public void pcPay(HttpServletRequest httpRequest,  HttpServletResponse httpResponse) throws ServletException, IOException, AlipayApiException {
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();//创建API对应的request
        alipayRequest.setReturnUrl("http://chenyidong.tunnel.2bdata.com/return_url.jsp");//成功后跳转的页面
        alipayRequest.setNotifyUrl("http://chenyidong.tunnel.2bdata.com/notify_url.jsp");//在公共参数中设置回跳和通知地址
        String wiDout_trade_no=httpRequest.getParameter("WIDout_trade_no");
        String WIDsubject=httpRequest.getParameter("WIDsubject");
        String WIDbody=httpRequest.getParameter("WIDbody");
        String WIDtotal_amount=httpRequest.getParameter("WIDtotal_amount");     //参数可以通过前台页面传递过来然后拼接到字符串中。
        alipayRequest.setBizContent("{" +
            "    \"out_trade_no\":\""+wiDout_trade_no+"\"," +
            "    \"product_code\":\"FAST_INSTANT_TRADE_PAY\"," +
            "    \"total_amount\":"+WIDtotal_amount+"," +
            "    \"subject\":\""+WIDsubject+"\"," +
            "    \"body\":\""+WIDbody+"\"," +
            "    \"timeout_express\":\"90m\"," +
            "    \"enable_pay_channels\":\"balance,pcredit,moneyFund,pcreditpayInstallment,bankPay\"," +
          //  "    \"passback_params\":\"merchantBizType%3d3C%26merchantBizNo%3d2016010101111\"," +
            "    \"extend_params\":{" +
            "    \"sys_service_provider_id\":\"2088102170303061\"" +
            "    }"+
            "  }");//填充业务参数
        String form="";

        form =TestPayConfiguration.success().pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        httpResponse.setContentType("text/html;charset=utf-8");
        httpResponse.getWriter().print(form);//直接将完整的表单html输出到页面
    }

    /**
     * 手机端支付
     * @param httpRequest
     * @param httpResponse
     * @throws ServletException
     * @throws IOException
     */
    @RequestMapping("/phonePay")
    public void phonePay(HttpServletRequest httpRequest,  HttpServletResponse httpResponse) throws ServletException, IOException {
        AlipayTradeWapPayRequest alipayRequest = new AlipayTradeWapPayRequest();//创建API对应的request
        alipayRequest.setReturnUrl("http://domain.com/CallBack/return_url.jsp");
        alipayRequest.setNotifyUrl("http://domain.com/CallBack/notify_url.jsp");//在公共参数中设置回跳和通知地址
        String wiDout_trade_no=httpRequest.getParameter("WIDout_trade_no");
        String WIDsubject=httpRequest.getParameter("WIDsubject");
        String WIDbody=httpRequest.getParameter("WIDbody");
        String WIDtotal_amount=httpRequest.getParameter("WIDtotal_amount");
        alipayRequest.setBizContent("{" +
        "    \"out_trade_no\":\"20150320010101002\"," +
        "    \"total_amount\":\"88.88\"," +
        "    \"subject\":\"Iphone6 16G\"," +
        "    \"product_code\":\"QUICK_WAP_PAY\"" +
        "  }");//填充业务参数
          alipayRequest.setBizContent("{" +
                    "    \"out_trade_no\":\""+wiDout_trade_no+"\"," +
                    "    \"product_code\":\"QUICK_WAP_PAY\"," +
                    "    \"total_amount\":"+WIDtotal_amount+"," +
                    "    \"subject\":\""+WIDsubject+"\"," +
                    "    \"body\":\""+WIDbody+"\"," +
                    "    \"timeout_express\":\"90m\"," +
                    "    \"extend_params\":{" +
                    "    \"sys_service_provider_id\":\"2088102170303061\"" +
                    "    }"+
                    "  }");//填充业务参数
        String form="";
        try {
        form = TestPayConfiguration.success().pageExecute(alipayRequest).getBody(); //调用SDK生成表单
        } catch (AlipayApiException e) {
        e.printStackTrace();
        }
          httpResponse.setContentType("text/html;charset=utf-8");
            httpResponse.getWriter().print(form);//直接将完整的表单html输出到页面
    }

    /**
     * 将钱转入商家账户
     * @throws AlipayApiException
     */
    @RequestMapping("/querenshouhuo")
    public void querenshouhuo() throws AlipayApiException{
        AlipayClient alipayClient = TestPayConfiguration.success();
        AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
        request.setBizContent("{" +
        "    \"out_biz_no\":\"31423214231\"," +
        "    \"payee_type\":\"ALIPAY_LOGONID\"," +
        "    \"payee_account\":\"shgtxv6441@sandbox.com\"," +//收款方账号
        "    \"amount\":\"10000\"," +
        "    \"payer_show_name\":\"买家收货\"," + 
        "    \"payee_real_name\":\"沙箱环境\"," + //收款方账号名称
        "    \"remark\":\"转账备注\"," +
        "  }");
        AlipayFundTransToaccountTransferResponse response = alipayClient.execute(request);
        if(response.isSuccess()){
            System.out.println("调用成功");
            System.out.println(response.getBody());
        } else {
            System.out.println("调用失败");
        }
    }


}

到此支付宝的支付就完成了,如有哪里不好,希望还能大家能补足
demo地址 http://download.youkuaiyun.com/download/chenyidong521/10132809

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值