首先当然是将支付宝封装好的接口的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

2万+

被折叠的 条评论
为什么被折叠?



