在日常生活中,我们基本上都是进行微信与支付宝的支付方式尽心支付,这种方式确实大大便利了我们的生活,那么如何在我们的产品中进行微信与支付宝支付的植入开发呢?

 

我们先进行支付宝的H5与网页端支付开发,这里只进行支付宝支付的调用,关于具体的生产逻辑(例如订单之类等)大家可以根据自己的逻辑处理添加;

支付宝的开发配置地址:https://openhome.alipay.com/

进入开发者中心--->选择研发服务进行我们沙箱环境配置(测试环境)

沙箱环境会为我们提供如下信息进行仿真测试

还有我们需要的:------里面的一些秘钥,进去之后支付宝会提供我们工具,傻瓜式生成就行

 

 

接下来我们进行java程序的编码:

(1)支付宝对于一些安全的加密操作已经帮我们进行了实现,大大降低了我们开发时间需要我们Maven导入支付宝的sdk依赖 ,在官方的文档中对于支付宝各种支付实现有很好的实例,我们可以下载下来进行copy

<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>3.1.0</version>
</dependency>

(2),引入我们的配置类(红色部分写入自己在支付宝后台中的配置)

package com.pay.alipay.util.config;

import java.io.FileWriter;
import java.io.IOException;

/* *
 *类名:AlipayConfig
 *功能:基础配置类
 *详细:设置帐户有关信息及返回路径
 *修改日期:2017-04-05
 *说明:
 *以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
 *该代码仅供学习和研究支付宝接口使用,只是提供一个参考。
 */

public class AlipayConfig {
    
    
    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public static String app_id ="2016091800539310";
    
    // 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key = "很长很长的字符串";
    
    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "很长很长的字符串";

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "http://68a71d94.ngrok.io/alipay/notify";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String return_url = "http://localhost:80";

    // 签名方式
    public static String sign_type = "RSA2";
    
    // 字符编码格式
    public static String charset = "utf-8";
    
    // 支付宝网关
    //public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";
     public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";//(沙箱环境)
    //  public static String gatewayUrl = "https://openapi.alipay.com/gateway.do";//(正式环境)
    // 支付宝网关
    public static String log_path = "C:\\";

        
    

    /** 
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
}

(3)编写Controller层调用service层进行获取支付表单

@RequestMapping(value="/alipay",method =RequestMethod.GET)
    public void alipay(HttpServletRequest request,HttpServletResponse response) {
        
        
        String  result =null;
        try {
        log.info("------->开始调用支付宝支付接口");
        //开始时间
        long starttime = System.currentTimeMillis();
        
          result =alipay.startAlipay();
        log.info("alipay支付请求结束,用时:"+ (System.currentTimeMillis() - starttime) + "毫秒");
        
        }
        catch(Exception e) {
            
            e.printStackTrace();
            }
        
    
        response.setContentType("text/html;charset=utf8");
        response.getWriter().write(result);//直接将完整的表单html输出到页面
        response.getWriter().flush();
        response.getWriter().close(); 
    }

 (4)建立支付所需要的实体对象entity,我们将支付参数封装在这里面,方便Json的转换

package com.pay.entity;


public class PayBizContent {
	//商户订单号,商户网站订单系统中唯一订单号,必填
	private String out_trade_no;
	//支付金额,,必填
	private String total_amount;
	//订单名称
	private String subject;
	//商品描述
	private String body;
	private  String product_code;
	public String getProduct_code() {
		return product_code;
	}
	public void setProduct_code(String product_code) {
		this.product_code = product_code;
	}
	@Override
	public String toString() {
		return "AlipayBizContent [out_trade_no=" + out_trade_no + ", total_amount=" + total_amount + ", subject="
				+ subject + ", body=" + body + ", timeout_express=" + timeout_express + "]";
	}
	//订单失效时间,如果是十分钟则是10m配置;
	private String timeout_express;
	public String getOut_trade_no() {
		return out_trade_no;
	}
	public void setOut_trade_no(String out_trade_no) {
		this.out_trade_no = out_trade_no;
	}
	public String getTotal_amount() {
		return total_amount;
	}
	public void setTotal_amount(String total_amount) {
		this.total_amount = total_amount;
	}
	public String getSubject() {
		return subject;
	}
	public void setSubject(String subject) {
		this.subject = subject;
	}
	public String getBody() {
		return body;
	}
	public void setBody(String body) {
		this.body = body;
	}
	public String getTimeout_express() {
		return timeout_express;
	}
	public void setTimeout_express(String timeout_express) {
		this.timeout_express = timeout_express;
	}

	

}

 

5)service 进行调用微信SDK

 

public String startAlipay() {
        
        
        //获得初始化的AlipayClient,微信SDK提供的,直接使用即可
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
                    AlipayConfig.app_id, AlipayConfig.merchant_private_key, "json",
                        AlipayConfig.charset, AlipayConfig.alipay_public_key,
                        AlipayConfig.sign_type);
        //wap端支付
        AlipayTradeWapPayRequest alipayRequest=new AlipayTradeWapPayRequest();
        //*****************pc端支付用这个****************//
        //AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);
        PayBizContent aliContent =new PayBizContent();
        
        aliContent.setTotal_amount("1290");//金额
        aliContent.setSubject("辣条");//商品名称
        aliContent.setOut_trade_no("180458382060");//商户订单,必须是唯一的
        aliContent.setTimeout_express("10m");//过期时间为10m;
     //**************pc端类型用这个**********************//
        aliContent.setProduct_code("FAST_INSTANT_TRADE_PAY");
        
        aliContent.setProduct_code("QUICK_WAP_WAY");
        JSONObject json =new JSONObject();
        alipayRequest.setBizContent(json.toJSONString(aliContent));
        log.info("放入支付宝接口中的参数--->"+alipayRequest.getBizContent());
        
        try {
        //成功后返回一个form表单字符串
            String  form = alipayClient.pageExecute(alipayRequest).getBody();
             log.info("AlipayServiceImpl-----调用支付宝返回结果:"+form);
             return form;
        } catch (AlipayApiException e) {
             log.error("AlipayServiceImpl----->支付宝生成表单错误");
            e.printStackTrace();
            return "调用失败";
        }
        
    
    }

 

posted on 2018-08-21 21:58  iscys  阅读(1063)  评论(0编辑  收藏  举报