支付宝付款

前端

fuqian(){
				let vm=this;
				// // 请求支付
				   uni.request({
				     url: 'http://????:8080/demo/pay',
				     method: 'post',
				     data:{
				       money:'0.01',
				     },
				     success(r) {
						  console.log("res---",r)
						  uni.requestPayment({
								  provider: 'alipay',
								  orderInfo: r.data, //微信、支付宝订单数据
								  success: function (re) {
									  console.log("支付回调",re)
									  vm.jin();
								  },
								  fail: function (err) {
									  console.log('fail:' , err);
								  }
						  });
				     }
				});
			},

后台接口:

package com.demo.zhifu;

import java.util.Date;
import java.util.Map;

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;

/**
 * @Author: zml
 * @Description: 支付宝支付
 * @CreateDate: 2020/1/14
 * @UpdateDate: 2020/1/14
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
public class AliPayTool {
                            //        https://openapi.alipay.com/gateway.do
    private static final String URL = "https://openapi.alipay.com/gateway.do"; //支付宝网关(固定)
    private static final String APP_ID = "???";
    private static final String PRIVATE_KEY = "???";
    private static final String FORMAT = "json";    // 参数返回格式,只支持 json
    private static final String CHARSET = "UTF-8";  // 编码集,支持 GBK/UTF-8
    private static final String PUBLIC_KEY = "???";
    private static final String SIGN_TYPE = "RSA2"; // 商户生成签名字符串所使用的签名算法类型,目前支持 RSA2 和 RSA,推荐使用 RSA2
    private static final String ALI_PUBLIC_KEY = "???";

    private static AlipayClient alipayClient;

    private AliPayTool() {
        alipayClient = new DefaultAlipayClient(URL, APP_ID, PRIVATE_KEY, FORMAT, CHARSET, PUBLIC_KEY, SIGN_TYPE);
    }

    private static AlipayClient getInstance() {
        if (alipayClient == null) {
            new AliPayTool();
        }
        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 = new Date().getTime() + "1";
        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://?????:8080/demo/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 "aa";
        }
    }

    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, ALI_PUBLIC_KEY, CHARSET,SIGN_TYPE);
    }

    // 提现


}

package com.demo.zhifu;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.alipay.api.AlipayApiException;

/**
 * @Author: zml
 * @Description: 描述
 * @CreateDate: 2020/1/12
 * @UpdateDate: 2020/1/12
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@RestController
@RequestMapping("demo")
@CrossOrigin(origins = "*")
public class DemoController {

    @Autowired
    ToolService toolService;

    @GetMapping("test")
    public String test() {
        return "hello world";
    }

    @PostMapping("upload")
    public String addGoods(@RequestParam(value = "files", required = false) MultipartFile files) {
        try {
            return toolService.upLoad(files);
        } catch (Exception e) {
            e.printStackTrace();
            return "";
        }
    }

    @PostMapping("pay")
    @CrossOrigin
    public String pay(@RequestBody PayParam param) {
        try {
            return toolService.pay(param.getMoney());
        } catch (AlipayApiException e) {
            e.printStackTrace();
            return e.getErrMsg();
        }
    }

    /**
     * 支付宝支付成功后.异步请求该接口
     *
     * @param request
     * @return
     */
    @PostMapping("notify_url")
    @ResponseBody
    public void notify(HttpServletRequest request) {
        try {
            System.out.println("支付回调结果:" + toolService.check(request));
        } catch (AlipayApiException e) {
            e.printStackTrace();
        }
    }
}

package com.demo.zhifu;

public class PayParam {
	
	String money;
	String subject;
	String body;
	public String getMoney() {
		return money;
	}
	public void setMoney(String money) {
		this.money = money;
	}
	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;
	}

}

package com.demo.zhifu;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import com.alipay.api.AlipayApiException;
import com.demo.index.QQCOSTool1;

/**
 * @Author: zml
 * @Description: 描述
 * @CreateDate: 2020/1/13
 * @UpdateDate: 2020/1/13
 * @UpdateRemark: 修改内容
 * @Version: 1.0
 */
@Service
public class ToolService {

    // 腾讯云上传图片
    public String upLoad(MultipartFile file) throws Exception {
        return QQCOSTool1.uploadPictureByFile(file);
    }

    public String pay(String money) throws AlipayApiException {
        String subject = "充值校园兼职";
        String body = "校园兼职余额";
        System.out.println(money);
        return AliPayTool.pay(money,subject,body);
    }

    /**
     * 把request请求参数转换为Map<String,String>
     * @param request 该请求
     * @return Map<String,String>格式的参数
     */
    public static Map<String,String> request2Map(HttpServletRequest request){
        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));
        }
        return resData;
    }

    public boolean check(HttpServletRequest request) throws AlipayApiException {
        //获取支付宝POST过来反馈信息
        Map<String,String> params = request2Map(request);
        return AliPayTool.check(params);
    }
}

发布了46 篇原创文章 · 获赞 1 · 访问量 1092

猜你喜欢

转载自blog.csdn.net/qq_43840143/article/details/104019733