java实现微信,支付宝app支付后台服务端统一下单,退款。

1.项目中导入 alipay.sdk

 <dependency>
 <groupId>com.alipay.sdk</groupId>

  <artifactId>alipay-sdk-java</artifactId>

<version>3.0.0</version>

</dependency>

2.初始化客户端配置私钥,公钥等.  

public class AlipayUtil {

	public static final String ALIPAY_APPID = ConfigUtil.getProperty("alipay.appid"); // appid

	public static String APP_PRIVATE_KEY = null; // app支付私钥

	public static String ALIPAY_PUBLIC_KEY = null; // 支付宝公钥

	static {
		try {
			 
					
			APP_PRIVATE_KEY = ConfigUtil.getProperty("alipay.appivatekey");  	 
			ALIPAY_PUBLIC_KEY =ConfigUtil.getProperty("alipay.publickey");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 统一收单交易创建接口
	private static AlipayClient alipayClient = null;

	public static AlipayClient getAlipayClient() {
		if (alipayClient == null) {
			synchronized (AlipayUtil.class) {
				if (null == alipayClient) {
					alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", ALIPAY_APPID,
							APP_PRIVATE_KEY,"json", "utf-8",
							ALIPAY_PUBLIC_KEY,"RSA2");
				}
			}
		}
	
		return alipayClient;
	}
3.service业务层调用:
	/**
	 * 支付宝下单
	 */
	@Override
	public  Map<String,Object> orderPay(Map<String, String> map, String notifyUrl) {
		AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
		AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); 
        model.setBody(map.get("Body"));
		model.setSubject(map.get("Subject"));
        model.setOutTradeNo(map.get("OutTradeNo"));//  
		model.setTimeoutExpress(map.get("TimeoutExpress"));
		model.setTotalAmount(map.get("Amount"));//  
		model.setProductCode(map.get("ProductCode")); 
		request.setBizModel(model); 
		request.setNotifyUrl(notifyUrl);
		AlipayTradeAppPayResponse response = null;
		Map<String,Object> returnMap=new HashMap<String,Object>();
		try {
			response = AlipayUtil.getAlipayClient().sdkExecute(request);
			logger.info(response.isSuccess()+"-------");
			if(response.isSuccess()) { 
				returnMap.put("responseState","success");
				System.out.println(response.getBody());
				returnMap.put("aliPayResult",response.getBody());
			}
		} catch (AlipayApiException e) {
public  Map<String,String> getSign(String restXml) throws Exception {
	 
		Map<String,String>params=WXPayUtil.xmlToMap(restXml);
		LOG.info("微信异步通知参数");
		
		if(wxpay.isPayResultNotifySignatureValid(params)) {//验签成功
			params.put("resultState","success");
		}else {
			params.put("resultState","fail");
		}
		return params;
	}

e.printStackTrace();} return returnMap;}4.验签:
@Override
	public boolean getSign(Map<String, String> params) {
	 
		logger.info(AlipayUtil.ALIPAY_PUBLIC_KEY + "--" + AlipayConstants.CHARSET_UTF8);
		try {
			return AlipaySignature.rsaCheckV1(params, AlipayUtil.ALIPAY_PUBLIC_KEY,"utf-8","RSA2");
		} catch (AlipayApiException e) { 
			e.printStackTrace();
		}
		return false;
	}
5.退款
@Override
	public Map<String, Object> orderPayRefund(Map<String, String> map) { 
		AlipayTradeRefundRequest request = new AlipayTradeRefundRequest(); // 统一收单交易退款接口
		AlipayTradeRefundModel model = new AlipayTradeRefundModel();
		model.setOutTradeNo(map.get("OutTradeNo"));
		//model.setTradeNo(map.get("TradeNo"));
		model.setRefundAmount(map.get("RefundAmount"));
		model.setRefundReason(map.get("RefundReason"));
		model.setOutRequestNo(map.get("OutRequestNo"));
	    request.setBizModel(model);
		Map<String, Object> restmap = new HashMap<>();// 返回支付宝退款信息
		AlipayTradeRefundResponse alipayResponse;
		try {
			alipayResponse = AlipayUtil.getAlipayClient().execute(request);
			if (alipayResponse.isSuccess()) {
				logger.info("退款成功");
				restmap.put("out_trade_no", alipayResponse.getOutTradeNo());
				restmap.put("trade_no", alipayResponse.getTradeNo());
				restmap.put("buyer_logon_id", alipayResponse.getBuyerLogonId());// 用户的登录id
				restmap.put("gmt_refund_pay", alipayResponse.getGmtRefundPay()); // 退款支付时间
				restmap.put("buyer_user_id", alipayResponse.getBuyerUserId());// 买家在支付宝的用户id
				restmap.put("refundType", "success");
			} else {
				logger.info("退款失败");
				restmap.put("refundType", "fail");
			}
		} catch (AlipayApiException e) {
			e.printStackTrace();
		}

		return restmap;
	}

 
 

微信支付:

1,引入:引入jar包

 <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>


        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.21</version>
        </dependency>


        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.21</version>
        </dependency>

2.下单:
 /**
     * 扫码支付  下单
     */
    public void doUnifiedOrder() {
        HashMap<String, String> data = new HashMap<String, String>();
        data.put("body", "腾讯充值中心-QQ会员充值");
        data.put("out_trade_no", out_trade_no);
        data.put("device_info", "");
        data.put("fee_type", "CNY");
        data.put("total_fee", "1");
        data.put("spbill_create_ip", "127.0.0.1");
        data.put("notify_url", "http://test.letiantian.me/wxpay/notify");
        data.put("trade_type", "APP");
        data.put("product_id", "12");
        // data.put("time_expire", "20170112104120");

        try {
            Map<String, String> r = wxpay.unifiedOrder(data);
            System.out.println(r);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2.下单获取到预支付订单后,进行二次签名给app端。

/**
	 * 
	    * @Title: secondSign  
	    * @Description: 微信二次签名  
	    * @param @param map
	    * @param @return
	    * @param @throws Exception    参数  
	    * @return String    返回类型  
	    * @throws
	 */
	public String secondSign(Map<String,String> map) throws Exception {
		LOG.info("第二次验签参数--"+map);
		String sign=WXPayUtil.generateSignature(map, config.getKey(), SignType.HMACSHA256);
		return sign; 
	}
	

3.验签

	
	
public  Map<String,String> getSign(String restXml) throws Exception {
	 
		Map<String,String>params=WXPayUtil.xmlToMap(restXml);
		LOG.info("微信异步通知参数");
		
		if(wxpay.isPayResultNotifySignatureValid(params)) {//验签成功
			params.put("resultState","success");
		}else {
			params.put("resultState","fail");
		}
		return params;
	}
4.退款
 /**
     * 作用:申请退款<br>
     * 场景:刷卡支付、公共号支付、扫码支付、APP支付<br>
     * 其他:需要证书
     * @param reqData 向wxpay post的请求数据
     * @param connectTimeoutMs 连接超时时间,单位是毫秒
     * @param readTimeoutMs 读超时时间,单位是毫秒
     * @return API返回数据
     * @throws Exception
     */
    public Map<String, String> refund(Map<String, String> reqData, int connectTimeoutMs, int readTimeoutMs) throws Exception {
        String url;
        if (this.useSandbox) {
            url = WXPayConstants.SANDBOX_REFUND_URL_SUFFIX;
        }
        else {
            url = WXPayConstants.REFUND_URL_SUFFIX;
        }
        String respXml = this.requestWithCert(url, this.fillRequestData(reqData), connectTimeoutMs, readTimeoutMs);
        return this.processResponseXml(respXml);
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值