支付宝付款前后端(app)

//前后端基本固定复制改个参数

前端

fuqian(){
				let vm=this;
				// // 请求支付
				   uni.request({
				     url: 'http://????:9091/Ceshizhifu/pay',
				     method: 'post',
				     data:{
				       "money":0.1,
					    "subject":"标题",
					    "body":"内容"
				     },
				     success(r) {
			
						  uni.requestPayment({
								  provider: 'alipay',
								  orderInfo: r.data, //微信、支付宝订单数据
								  success: function (re) {
									  console.log("支付回调",re)
									  vm.jin();
								  },
								  fail: function (err) {
									  console.log('fail:' , err);
								  }
						  });
				     }
				});
			},

后台接口:
接收类:

@Data
public class PayParam {
    String money;//钱数
    String subject;//标题
    String body;//内容
}

yml配置

ali-zhifu:
  # appId
  APP_ID : 
  # 商户的私钥
  APP_PRIVATE_KEY : 
  # 支付宝公钥
  ALIPAY_PUBLIC_KEY : 
  # 编码
  CHARSET : utf-8
  # 支付宝网关
  GATEWAY : https://openapi.alipaydev.com/gateway.do
  # 参数返回格式,只支持 json
  FORMAT: json
  #商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2
  SIGN_TYPE: RSA2

工具类:

package Ceshi.utils.alizhifu;

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.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * @author 翎墨袅
 * @version V1.0
 * @Package Ceshi.utils.alizhifu
 * @ClassName Alizhifu
 * @Description 阿里支付
 * @date 2020/7/28 14:49
 **/
@Component
public class Alizhifu implements InitializingBean {
    @Value("${ali-zhifu.APP_ID}")
    private String appid;

    @Value("${ali-zhifu.APP_PRIVATE_KEY}")
    private String appprivatekey;

    @Value("${ali-zhifu.ALIPAY_PUBLIC_KEY}")
    private String alipaypublickey;

    @Value("${ali-zhifu.CHARSET}")
    private String charset;

    @Value("${ali-zhifu.GATEWAY}")
    private String gateway;

    @Value("${ali-zhifu.FORMAT}")
    private String format;

    @Value("${ali-zhifu.SIGN_TYPE}")
    private String signtype;

    private static String APP_ID;
    private static String APP_PRIVATE_KEY;
    private static String ALIPAY_PUBLIC_KEY;
    private static String CHARSET;
    private static String GATEWAY;
    private static String FORMAT;
    private static String SIGN_TYPE;

    /**
     * 服务器启动的时候,ConstantPropertiesUtil初始化,调用里面的afterPropertiesSet方法,读取配置文件的内容
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        APP_ID = appid;
        APP_PRIVATE_KEY = appprivatekey;
        ALIPAY_PUBLIC_KEY = alipaypublickey;
        CHARSET = charset;
        GATEWAY = gateway;
        FORMAT = format;
        SIGN_TYPE = signtype;
    }



    private static AlipayClient alipayClient;

    private Alizhifu() {
        alipayClient = new DefaultAlipayClient(CHARSET, APP_ID, APP_PRIVATE_KEY, FORMAT, CHARSET,ALIPAY_PUBLIC_KEY , SIGN_TYPE);
    }

    private static AlipayClient getInstance() {
        if (alipayClient == null) {
            new Alizhifu();
        }
        return alipayClient;
    }

    /**
     * out_trade_no String 订单编号
     * product_code String 销售产品码,与支付宝签约的产品码名称。注:目前仅支持FAST_INSTANT_TRADE_PAY
     * total_amount double 订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]。
     * subject String 订单标题
     * body String 订单内容
     * time_expire Date 超时时间,格式:yyyy-MM-dd HH:mm:ss1
     * timeout_express String g格式:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。
     */
    public static String pay(String money,String subject,String body) throws AlipayApiException {
        AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
        // 时间戳+用户id
        String orderCode = System.currentTimeMillis() + "dgzjil";
        AlipayTradeAppPayModel model = new AlipayTradeAppPayModel();
        model.setBody(body);
        model.setSubject(subject);
        // 创建一个订单编号
        model.setOutTradeNo(orderCode);
        model.setTimeoutExpress("15m");//十五分钟后失效
        model.setTotalAmount(money);//金额
        model.setProductCode("QUICK_MSECURITY_PAY");
        request.setBizModel(model);
        request.setNotifyUrl("http://39.106.76.233:9091/Ceshizhifu/notify_url");//通知地址
        AlipayTradeAppPayResponse response = getInstance().sdkExecute(request);
        if (response.isSuccess()) {
            System.out.println(money);
            System.out.println("调用成功");
            return response.getBody();
        } else {
            System.out.println("调用失败");
            return "调用失败";
        }
    }

    public static boolean check(Map<String,String> params) throws AlipayApiException {
    //这个接口是上面设置回调的自己不用调用
        //切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
        //boolean AlipaySignature.rsaCheckV1(Map<String, String> params, String publicKey, String charset, String sign_type)
        return AlipaySignature.rsaCheckV1(params, ALIPAY_PUBLIC_KEY, CHARSET,SIGN_TYPE);
    }
}

控制器

package Ceshi.Controller;

import Ceshi.param.PayParam;
import Ceshi.utils.Result;
import Ceshi.utils.alizhifu.Alizhifu;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping(value="Ceshizhifu")
public class CeshizhifuController {

    @PostMapping("pay")
    public Result pay(@RequestBody PayParam param) {
        try {
            System.out.println("支付结果:" + Alizhifu.pay(param.getMoney(),param.getSubject(),param.getBody()));
            return Result.ok("data","成功");
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("失败");
        }
    }

    /**
     * 支付宝支付成功后.异步请求该接口
     *
     * @param request
     * @return
     */
    @PostMapping("notify_url")
    public void notify(HttpServletRequest request) {
        try {
            Enumeration<String> names = request.getParameterNames();
            Map<String, String> resData = new HashMap<String, String>();
            while (names.hasMoreElements()) {
                String name = names.nextElement();
                resData.put(name, request.getParameter(name));
            }
            Map<String,String> params = resData;

            System.out.println("支付回调结果:" + Alizhifu.check(params));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

依赖

<!-- alipay -->
        <dependency>
            <groupId>com.alipay.sdk</groupId>
            <artifactId>alipay-sdk-java</artifactId>
            <version>3.1.0</version>
        </dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翎墨袅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值