支付宝1.0和2.0对接开发

1.开发前准备
支付宝1.0
partner : 合作身份者ID,签约账号,以2088开头由16位纯数字组成的字符串
private_key : 商户的私钥,需要PKCS8格式,RSA公私钥生成
alipay_public_key : 支付宝的公钥
支付宝2.0
APPID : 商户应用ID
RSA_PRIVATE_KEY : 商户私钥
ALIPAY_PUBLIC_KEY : 支付宝公钥


2.开始开发

1.首先创建支付宝付款抽象类,1.02.0都继承此类,用于统一处理
/**
 * 支付宝付款
 *
 * @author shaoying.c
 **/
public abstract class AbstractAlipay {

    protected Logger logger = LoggerFactory.getLogger("etrace");
    /**
     * 支付宝支付
     */
    public abstract String pay(Map<String,String> payInfo);
}

2.实现1.0接口
/**
 * 支付宝1.0实现
 * 
 * @author shaoying.c
 * @CreateDate 2017/7/14 14:15
 **/
public class Alipay extends AbstractAlipay {

    @Override
    public String pay(Map<String, String> payInfo) {
        以下参数均从payInfo获取(service、partner....)

        //将请求参数打包
        Map<String, String> paraTemp = new HashMap<> ();
        paraTemp.put("service", service);//接口名称
        paraTemp.put("partner", partner);//合作者身份ID
        paraTemp.put("seller_id", seller_id);//卖家支付宝用户号
        paraTemp.put("_input_charset",input_charset);//字符集编码
        paraTemp.put("payment_type", payment_type);//支付类型
        paraTemp.put("notify_url", notify_url);//异步通知页面路径
        paraTemp.put("return_url", return_url);//同步通知页面
        paraTemp.put("out_trade_no",  tradeId);//商户订单号,必填
        paraTemp.put("subject", subject);
        paraTemp.put("total_fee", total_fee ));//付款金额,必填 
        paraTemp.put("show_url", show_url);//商品展示的超链接,必填
        paraTemp.put("body", payInfo.get ( "subject" ));//商品描述
        return AlipaySubmit.buildRequest(paraTemp, "get", "确认");
    }
}

3.支付宝2.0实现
/**
 * 支付宝支付2.0
 *
 * @author shaoying.c@adsl.cn
 * @CreateDate 2017/7/14 11:43
 **/
public class Alipay2 extends AbstractAlipay {

    // 销售产品码 必填 H5支付
    public static final String product_code="QUICK_WAP_PAY";

    private AlipayClient alipayClient = null;

    @Override
    public String pay(Map<String, String> payInfo) {

        logger.info ( "payInfo====" + payInfo );

        AlipayConfig2.APPID = payInfo.get ("appId");
        AlipayConfig2.RSA_PRIVATE_KEY = payInfo.get ( "private_key" );
        AlipayConfig2.ALIPAY_PUBLIC_KEY = payInfo.get ( "aliPublicKey" );

        alipayClient = new DefaultAlipayClient (  AlipayConfig2.URL, AlipayConfig2.APPID, AlipayConfig2.RSA_PRIVATE_KEY, AlipayConfig2.FORMAT, AlipayConfig2.CHARSET, AlipayConfig2.ALIPAY_PUBLIC_KEY, AlipayConfig2.SIGNTYPE);
        //创建API对应的request
        AlipayTradeWapPayRequest payRequest = new AlipayTradeWapPayRequest ();

        //封装请求支付信息 out_trade_no: 商户订单号,不重复 、subject:订单标题、total_amount:订单总金额
        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
        model.setOutTradeNo(payInfo.get ( "tradeId" ));
        model.setSubject(payInfo.get ( "subject" ));
        model.setTotalAmount(payInfo.get ( "total_fee" ));
        model.setProductCode(product_code);
        payRequest.setBizModel(model);

        //设置同步回调地址
        payRequest.setReturnUrl(payInfo.get ( "return_url" ));
        //设置异步回调地址
        payRequest.setNotifyUrl(payInfo.get ( "notify_url" ));

        String form = "";
        try {
            form =  alipayClient.pageExecute(payRequest).getBody(); //调用SDK生成表单
        } catch (AlipayApiException e) {
            e.printStackTrace();
            logger.error("支付宝生成表单出错:" + e.getMessage());
        }
        return form;
    }
}

4.支付调用公共方法
/**
 * 支付宝支付公共方法
 *
 * @author shaoying.c@adsl.cn
 * @CreateDate 2017/7/19 16:28
 **/
@Controller
public class AlipayCommonMethod extends BaseController {

    InvokeInterface invoke = InvokeInterface.getInstance();

    /**
     * 支付宝支付
     *
     * @param request
     * @param response
     */
    @RequestMapping(value = "${adminPath}${frontPath}/alipayCommon")
    public void alipay(HttpServletRequest request, HttpServletResponse response, Model model) throws IOException {
        String domain = request.getHeader("Host");//获取域名
        String buyer = request.getParameter ( "buyer" );
        String goodsName = request.getParameter ( "subject" );
        String tradeId = request.getParameter("tradeId");
        Map<String,String> alipayInfo = new HashMap<> ();

        alipayInfo.put ( "appId", appId);//商户应用号
        alipayInfo.put ( "partner", partner);//合作者ID
        alipayInfo.put ( "private_key", private_key);//私钥
        alipayInfo.put ( "aliPublicKey", aliPublicKey);//公钥
        alipayInfo.put ( "tradeId", tradeId );//商户订单号
        alipayInfo.put ( "subject", !"".equals (goodsName) ? goodsName :"" );//订单描述
        alipayInfo.put ( "total_fee", String.valueOf ( (double)totalAmount/1000) );//订单价格


        AbstractAlipay abstractAlipay = null;
            //根据支付版本,判断调用1.0还是2.0,实例化不同对象
        if ("10".equals ( alipayVersion )){
             abstractAlipay = new Alipay ();
        } else {
             alipayInfo.put ( "notify_url", notify_url);
            alipayInfo.put ( "return_url", return_url );
                abstractAlipay = new Alipay2 ();
            }
            response.setContentType("text/html;charset=" + AlipayConfig2.CHARSET);
            response.getWriter().write(abstractAlipay.pay ( alipayInfo ));//直接将完整的表单html输出到页面
            response.getWriter().flush();
            response.getWriter().close();
        }
    }

3.pom.xml

<dependency>
    <groupId>alipay</groupId>
    <artifactId>alipay-sdk</artifactId>
    <version>${alipay.sdk.version}</version>
</dependency>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值