19支付宝支付

这篇博客介绍了如何集成支付宝支付到项目中,提供了两个代码库的链接——roncoo-pay和weixin-java-tools,并给出了一个简单的XML配置示例。在`AlipayConfig`和`ApplyController`中定义了关键操作,利用`AlipayUtil`的`pay_ALI_WEB`方法生成订单。
摘要由CSDN通过智能技术生成

 

https://gitee.com/roncoocom/roncoo-pay

https://gitee.com/binary/weixin-java-tools

 

 

demo:

xml

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

 AlipayConfig :

package com.cn.config;

public class AlipayConfig {
        // 合作身份者ID,以2088开头由16位纯数字组成的字符串
        public static String partner = "2088231174768559";
        // 商户的私钥,使用支付宝自带的openssl工具生成。
        public static String private_key="MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDfEYuCm08Lvtdsoj6noTJ8UjuNnlRJ7S34CuZYJB38geNSNoUJ3lCb1Pj12eF8md7O84Np5dzHeLeuElORHelvvzxjvpJ1gQcKXrtMvOQdgA84syYOKxCKLvsL5ek5kUqgmxSE2wR9TfDOCSIukn+ZYltMa9haXSqI4+uuxyKUeJTJ1nsrEs9hkHPKvTrVrHi0z9nG0DlCLbWZdjQ7imEo5GDRng/JoOD27rwNEPtK6u/KL9DAErVRab8pLB1NyzpL+jJcMuNUY5NYBHc/0b3N8D9Nj3PXkG6rhRWvhmY04lpvGoGKEgSHKR9MdgCzj15h6iyCDwNW3FOeLNYAZzJFAgMBAAECggEBAIK6vZAlhQXVKls4GpATIItLhitRBwTsQ2yCtswhHpHFbXvZB87ow0UQY3dx4XwskS+n9vQxClq8nKkfhGofpZcf9Dxgi2Th4UZqjkpCyU2gp0sLctoK0v6o2ef3Ld/XDm1hdX0G/nKRIvcc0zOIF8/EnM0Exx7uSuc+6/jaK6HmkOh0KNB6NzvHoOid0ZNPTwYlCLStn4b3Q2zFAt2PI4dAHMgvkFdu0rfdHP5wzKVKPHPfb1j9eC3n13ti6rTrPFsVXB4u2YhBGY/8G2UKC05io/5PrvEMigMtdBsNTs3GqF3VnA+IPAEvYh7E/7lZqdCF5A9PBE6NoMfR2pYwQGECgYEA8x+uTJzio+cRYBYImBtb1EgNdn2PQZZoWI7sN/S13EUSh6+hO9Tud8SiEKHdgcgjcFNmK1AFOwLLd+tHc+gZlE2rBQ1M98QTm6/urVKyLGDpLroLpuA6jQFQYVBl/xTXT6sDeZzQ7cSLwjw4gLfWtCkNsTEMXTPEUa8Vd8DY0Z8CgYEA6uHzmQJNw/5RB1Vfu2iQ7u7WqG8EXYoGqs+4wGDx1s24VVF3/6/PZ2RsatJk7+YgRI45OmrLgqf8dna3/YpyWK/3rje8i0UOorUBLxIlYL1l2xZzIQzoY/x8UjO2fhYkYer5sOyITcd/bX++LS9T+LKms82oPmNjMkLKJDvAWZsCgYEA2kD5httb9kmL5pdBFdORp0sbkuB6xyVP/Rgo5L6wt9HmJZq8AmtPvILv/kBhCo3xinfEA2PtniEPKVM0rM+Sjvj+ayWaj94cwCm6+SuAuagyDPmFVkR7K3QfhYzYU5qRA3sBPp5RTPGhiTfofV0LyGYGXagrckvzlGS5v+yGd/8CgYADGo0/flpMtrWXZTdooI8ZuSo4+46RNdu0sh383MsVTY6cAgGV7VrOQPN1zeXrjZzriv2SmgqqZVHett7jiMrOBTU+phnltTnmSIIFfzXjO113Maq/yw3fFF0IMQq+S8ibSqGWBuoeLP6wEboPmsp/RM0THyqT+Hg9F8jYBboa9QKBgE7SYE81mQLES1sIIEe4dqKm5rfUVgIFqMHSHbs3ehUxQbX04LcHXFHucl2FztByNj68cUCU0r3GuttesYqDXeMAaFOW0WmgZ1JUd5PxrkGjcvOs/G4RoAeZTLFMdTIHRydmtvhqXvr4EsIN6GuEBCEXsGp41FS9PRfbhY3iFZOM";
        // 支付宝的公钥,
        public static String ali_public_key  = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmawKcguB5uPdeNVaLemm8NUA3pvPlioYaiepgZrVuDMQMwr6Z7tGRkf8fUfG1dTn+TFB5TLPJ4k5cHIinIHtI95YKEng6T379tVjXXme8Y8sQl7KwZMuKcD3Olbnsxef6XDS2O0rgXAK/w5jOxXUYNCIkKRaRQi0Q2vy5re2rWnc11AOrxMol9GakTPltI/ie6/ePI+euT5KJxHFywCTkO0BaUFyCUCdwj2kSs2Zr53e5mqYltDTvF8KlcZxmb1YiTQGLoi5TqBX+lRN11TbIg+apy2naShouV7P0YnEcGa/1sU3ZDSiGUdOUi2z0lRXniNpAxIn8fU+P+SvkhRxOwIDAQAB";
        // 接收通知的接口名(这里的域名或者ip需要填写外网可以访问的地址)
        public static String service = "https://www.dq-city.com/aliPay/api/callBack";
        //APPID
        public static String app_id="2018082761115636";


}

ApplyController:

model是需要自己传入的参数

package com.cn.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;

import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.cn.config.AlipayConfig;

import com.cn.utils.OrderNumber;
import com.cn.utils.ResultBean;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;


import java.util.HashMap;
import java.util.Map;
/**
 * @Author: gxp
 * @Date: 2018/8/20 11:02
 * @Description  获取客户端订单信息,返回签名后的订单信息
 */

@Controller
public class ApplyController {

    @RequestMapping(value = "/api/apply")
    @ResponseBody
    public ResultBean apply(@RequestParam String money) {
        System.out.println("===========================支付宝调用开始");
        //实例化客户端
        String mess = "";
        AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do", AlipayConfig.app_id,
                AlipayConfig.private_key, "json", "UTF-8", AlipayConfig.ali_public_key, "RSA2");  //固定值
//实例化具体API对应的request类,类名称和接口名称对应,当前调用接口名称:alipay.trade.app.pay
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
//SDK已经封装掉了公共参数,这里只需要传入业务参数。以下方法为sdk的model入参方式(model和biz_content同时存在的情况下取biz_content)。
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel(); //model是要定义的值
        model.setBody("全息通服务平台");
        model.setSubject("全息通服务平台");
        model.setOutTradeNo(OrderNumber.getOrderIdByTime());
        System.out.println("订单号为:"+OrderNumber.getOrderIdByTime());
        model.setTimeoutExpress("30m");
        model.setTotalAmount(money);
        model.setProductCode("QUICK_MSECURITY_PAY");
        request.setBizModel(model);
        request.setNotifyUrl(AlipayConfig.service);
        try {
            //这里和普通的接口调用不同,使用的是sdkExecute
            AlipayTradeAppPayResponse response = alipayClient.sdkExecute(request);
            System.out.println("orderString:"+response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
            mess = response.getBody();
            Map<String,Object> map = new HashMap();
            map.put("orderString",mess);
            return ResultBean.ok(map);
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }

        return ResultBean.error();
    }
}

============

工程中进行了适当的修改:

AlipayUtil:

package com.air.order.service.orderUtil;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.air.order.service.service.impl.OrderServiceImpl;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;

import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeRefundRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;

public class AlipayUtil {

	protected static Logger logger=LoggerFactory.getLogger(AlipayUtil.class);
	
	//支付宝网站支付
	public static String APPID = "2018090561276453";
	public static String RSA_PRIVATE_KEY ="MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDaRfK+hd6jGBgHhthWf1RzSeLfK4EaOP90AwD4Tuw8zlmJAYph3qGQ9C7nHq/mh58O9H/cssSBiyO87vmrRJTbv6tObsfQ0J8GDUINmUGASp8x0pfoYA2b13YIv+sd8ZX12wHFrvbn7fSDaoGyOYhA/tZpA8eYA5y08eTAFGJ/S74pJX0lqrlvCHjOzstmerSLWHP0UDrKNcYcmiGnWs3O2p6mz0lpEz2u2YAPpiToe+56JcSnk5qSzlwQwjWL4PhKsmgQz542eRJhCZmuymsqDc1i1jlp/E0BqlZf0/lxcuA++9pVuFPZa2CHaq3TLSrAMliWS3wpH7FlByeg8qWJAgMBAAECggEAOsfVjEte3osRhY1h20FlC7sdFr6PgPFSkfpxG22dnu5vHD9G9f5PgkrQCruv4SQqyIs9l8CovL4svKeaou3QLLGcP34D348fFDEj1aetBRCTeIZfFFwxrgNDLS4J8kFqAhCdlI/+vAzP6UgYb1ehAufd89/ps11dqTjvQm76646Jqrg6IktjXnrFc9YEOL6znTCRyAfd3T6UC/SefYOseS9BSPxO46T8YFTREtl+Rhi7sOcFSk0lTDJ9mgheFdXfP0X8mYTZspIryJFoklctRo3glqInZdTPckqA2oT7EOwuMvxBVdd+t34p17LZrDC7KQ+3IA2nlBaVw4roLBk2BQKBgQD8a/bu4xo/tbbYOH9B82tpbdLPgt2gTUYkH1aLf5D1qFieheQf4fxvFvF8E6t8CRj82B6bGkScZO8X8C5NMAXnKD8xyGNfnZxSJGbgYGSJM4l7Xt6A+d/Rhcd7/YqwpccawTsieYklD7v+2dtAqafIyLOxHH5guJ8ZSl2KipqO2wKBgQDdXg8jzLtqVgAnPlDttkNJ9NyWD1cpUV70eM79AkpcBKC+k6FvTDq07edxqXdQf8iRyegW86oem4iWNDBmse3v1C1i78pSPtEVbc4XjKDdqKp7LGlaTNxlGeP/Mo1vaNRxIJg62p7G1IWo/KV3/zQxVZORW+Fj/1/5ciIGPAXQawKBgDMCrnhANMHDOxwe7ripNH+tzfhZfegzNYV/P8IZGXZLev0uGZfH13err0lfwDvkqsQN+MFnYY4pZ5fy1aiLl+XK4FpzIIHmG/0Nliypzidb3uCrn1N5K53v5wxLhIeGOOJTQlwJK4nt0BQEeqZqopmU1ZtpIrDxHlXCDX093VYZAoGAYhfZG6MQdZlwbfNmR0AZ5z7TNMfNduiw7CJQjrsiGk6OsISY58nexegaRDq1PX2ycjAHYYxOGUwQpYaw4AD+j+T0y7+4ZuOhIR7MUZEmg7LHANf4Q2SF0WM8rgxHslPAt/SaoJHaA/+OzwhNhrQW+7mRL7uIUBiM/et+ekbEyMsCgYAEAp8VTXX23gvn2ZJ32xrnHPdmKUPFSSjq85/NWqwWlA1YQL+mupVVSMzFOjzMJM8G8d/qsY6iVC15JD3qNUFR9RP9UwQawbq+yPgV4nziGbgnE9y8k/lsCL8Jq03791dcH8WC40ikzoZT5vvyDPcLX/23ZBFcaS1spgFx7bOe/w==";


	public static String return_url = "http://www.hiss.com.cn/zplatform-web/web/phone/buy_success.html";
	public static String URL = "https://openapi.alipay.com/gateway.do";
	public static String CHARSET = "UTF-8";
	public static String FORMAT = "json";
	public static String ALIPAY_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2kXyvoXeoxgYB4bYVn9Uc0ni3yuBGjj/dAMA+E7sPM5ZiQGKYd6hkPQu5x6v5oefDvR/3LLEgYsjvO75q0SU27+rTm7H0NCfBg1CDZlBgEqfMdKX6GANm9d2CL/rHfGV9dsBxa725+30g2qBsjmIQP7WaQPHmAOctPHkwBRif0u+KSV9Jaq5bwh4zs7LZnq0i1hz9FA6yjXGHJohp1rNztqeps9JaRM9rtmAD6Yk6HvueiXEp5Oaks5cEMI1i+D4SrJoEM+eNnkSYQmZrsprKg3NYtY5afxNAapWX9P5cXLgPvvaVbhT2Wtgh2qt0y0qwDJYlkt8KR+xZQcnoPKliQIDAQAB";
	public static String SIGNTYPE = "RSA2";
	
	public static String pay_ALI_WEB(String out_trade_no,double total_amount,String subject,String notify_url) throws Exception{
		
		AlipayClient client = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY,SIGNTYPE);
		AlipayTradeAppPayRequest alipay_request=new AlipayTradeAppPayRequest();
	    
	    // 封装请求支付信息  
	    AlipayTradeAppPayModel model=new AlipayTradeAppPayModel();
	    model.setOutTradeNo(out_trade_no);
	    model.setSubject(subject);
	    model.setTotalAmount(String.valueOf(total_amount));
	    model.setProductCode("QUICK_MSECURITY_PAY");
	    alipay_request.setBizModel(model);
	    // 设置异步通知地址
	    alipay_request.setNotifyUrl(notify_url);
		try {
			// 调用SDK生成表单
			//form = client.pageExecute(alipay_request).getBody();
//			AlipayTradeAppPayResponse response = client.pageExecute(alipay_request);
			
		AlipayTradeAppPayResponse response = client.sdkExecute(alipay_request);
            logger.info(response.getBody());//就是orderString 可以直接给客户端请求,无需再做处理。
			if(response.isSuccess()){
				logger.info("调用成功");
				return response.getBody();
				
				} else {
					logger.info("调用失败");
				}
		
		} catch (AlipayApiException e) {
			e.printStackTrace();
		} 
		
		return null;
	}
	
	
	
	/**
	 * 需要
	 * 1 订单号 out_trade_no  1201809122032014087
	 * 2 refund_amount	
	 * @return
	 * @throws Exception
	 */
	public  static String refundALiPay(String out_trade_no,double refund_amount,String refund_reason ) throws Exception{
		AlipayClient alipayClient = new DefaultAlipayClient(URL, APPID, RSA_PRIVATE_KEY, FORMAT, CHARSET, ALIPAY_PUBLIC_KEY,SIGNTYPE);
		AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
		
		AlipayRefund alipayRefund= new AlipayRefund(); 
		alipayRefund.setOut_trade_no("1201809141026343532");//这个是商户的订单号 
		alipayRefund.setTrade_no("2018091422001471850546837535");//这个是支付宝的订单号 
		alipayRefund.setRefund_amount("0.01");//退款金额 
		alipayRefund.setRefund_reason("正常退款");//退款说明 
		alipayRefund.setOut_request_no("HZ01RF001"); 
		alipayRefund.setOperator_id("OP001"); 
		alipayRefund.setStore_id("NJ_S_001"); 
		alipayRefund.setTerminal_id("NJ_T_001");//request.setBizContent(JSONUtil.simpleObjectToJsonStr(alipayRefund)); 
		request.setBizContent(JSONObject.toJSONString(alipayRefund));//2个都可以,这个参数的顺序 不影响退款 
		AlipayTradeRefundResponse response = alipayClient.execute(request); 
		if (response.isSuccess()) { 
		System.out.println("调用成功"); 
		} else { 
		System.out.println("调用失败"); 
		} 
		
		return null;
	}
	
	
	public static void main(String[] args) {
		try {
			refundALiPay("1201809122032014087", 10.0, "你好");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

将生成订单的代码和配置的代码写在了一起,然后调用util中的pay_ALI_WEB方法生成订单

String aliPay = AlipayUtil.pay_ALI_WEB(orderId, order.getTotalFee()/100.00, body, param.getPaymentURL()+"ByaliPay");
				
 AlipayVo aliPayVo = new AlipayVo();
aliPayVo.setAlipay(aliPay);
aliPayVo.setNonceStr(NONCE_STR_WX);
logger.info(aliPay+"支付宝的重要内容");
logger.info(NONCE_STR_WX+"随机字符串");
result.setDataArray(aliPayVo);
return result;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值