java对接支付宝实现支付功能

**

java对接支付宝实现支付功能

**

Controller

/**
 * 支付功能
 * @return
 */
@RequestMapping("/test")
public ModelAndView test(){
    ModelAndView mv = new ModelAndView("test");
    return mv;
}

/**
 * 支付宝回调
 * @param request
 * @return
 * @throws UnsupportedEncodingException
 * @throws AlipayApiException
 */
@RequestMapping("/paySuccess")
@ResponseBody
public SuccessRequest paySuccess(HttpServletRequest request) throws UnsupportedEncodingException, AlipayApiException {

    SuccessRequest payQuery = new SuccessRequest();
    Map<String,String> map = new HashMap<>();
    map = PayUtil.paySuccess(request);
    if(map!=null){
        redisUtil.setStrKV("xxxx",1);
        payQuery.setId(0);
        payQuery.setKeyword("成功");
    }
    return payQuery;
}

/**
 * 支付宝验签
 * @param oid
 * @param oname
 * @param money
 * @param desc
 * @param model
 * @return
 * @throws AlipayApiException
 */
@RequestMapping("/pay")
@ResponseBody
public SuccessRequest pay(String oid,String oname,String money,String desc,Model model) throws AlipayApiException {
    SuccessRequest payQuery = new SuccessRequest();
    payQuery = PayUtil.payQuery(oid);
    if(payQuery.getId().equals(0)){
        payQuery = PayUtil.pay(oid,oname,money,desc);
    }else if(payQuery.getId().equals(2)){
        redisUtil.setStrKV("xxxx",1);
    }
    System.out.println(payQuery);
    return payQuery;

}

Entity

@Data
@AllArgsConstructor
@NoArgsConstructor
public class SuccessRequest implements Serializable {
private Integer id;
private String keyword;
private String callback;
}

支付util

我的这个付款验签需要用的是应用公钥、查询支付信息用的是支付宝公钥验签(不明白为什么,如果不这样就会报验签错误)

//网关
final static String serverUrl = “https://openapi.alipaydev.com/gateway.do”;
//appid
final static String appId = “”;
//私钥
final static String privateKey = “”;
//支付宝公钥
final static String ali_key="";
//应用公钥
final static String ali_keyyingyong = “”;
final static String signType = “RSA2”;

/**
 * 付款
 *
 * @param oid
 * @param oname
 * @param money
 * @param desc
 * @return
 * @throws AlipayApiException
 */
public static SuccessRequest pay(String oid, String oname, String money, String desc) throws AlipayApiException {
    AlipayClient alipayClient = new DefaultAlipayClient(
            serverUrl,
            appId,
            privateKey,
            format,
            charset,
            ali_keyyingyong,
            signType
    );
    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
    request.setNotifyUrl("http://工程公网访问地址/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp");
    //returnUrl
    request.setReturnUrl("http://localhost:1234/paySuccess");
    JSONObject bizContent = new JSONObject();
    //商品信息
    //商品id
    bizContent.put("out_trade_no", oid);
    //价格
    bizContent.put("total_amount", money);
    //名称
    bizContent.put("subject", oname);
    //备注
    bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");

    request.setBizContent(bizContent.toString());
    AlipayTradePagePayResponse response = alipayClient.sdkExecute(request);
    //3、请求支付宝进行付款,并获取支付结果
    String result = alipayClient.pageExecute(request).getBody();
    System.out.println(result);
    SuccessRequest successRequest = new SuccessRequest();
    if (response.isSuccess()) {
        successRequest.setId(0);
        successRequest.setKeyword("调用成功");
        successRequest.setCallback(result);
    } else {
        System.out.println("调用失败");
        successRequest.setId(1);
        successRequest.setKeyword("调用失败");
    }

    return successRequest;
}

/**
 * 查询是否支付
 * @param oid
 * @return
 * @throws AlipayApiException
 */
public static SuccessRequest payQuery(String oid) throws AlipayApiException {
    AlipayClient alipayClient = new DefaultAlipayClient(
            serverUrl,
            appId,
            privateKey,
            format,
            charset,
            ali_key,
            signType
    );
    SuccessRequest successRequest = new SuccessRequest();
    AlipayTradeQueryRequest alipayRequest = new AlipayTradeQueryRequest();
    //商户订单号,商户网站订单系统中唯一订单号
    String out_trade_no = oid;

    alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\"}");

    AlipayTradeQueryResponse response = alipayClient.execute(alipayRequest);
    String tradeStatus = response.getTradeStatus();

        if(tradeStatus!=null&&tradeStatus.equals("TRADE_SUCCESS")){
            successRequest.setId(2);
            successRequest.setKeyword("用户已支付");
            System.out.println("用户已支付");
        }else{
            successRequest.setId(0);
            successRequest.setKeyword("用户未支付");
            System.out.println("用户未支付");
        }
    return successRequest;
}



/**
 * 支付成功回调
 * @param request
 * @return
 * @throws AlipayApiException
 */
public static Map<String,String> paySuccess(HttpServletRequest request) throws AlipayApiException {
    //获取支付成功订单id,获取成功的状态
    Map<String,String> params = new HashMap<String,String>();
    Map requestParams = request.getParameterMap();
    for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();){
        String name = (String) iter.next();
        String[] values = (String[]) requestParams.get(name);
        String valueStr = "";
        for (int i = 0; i < values.length; i++) {
            valueStr = (i == values.length - 1) ? valueStr + values[i]
                    : valueStr + values[i] + ",";
        }
        params.put(name, valueStr);
    }
    SuccessRequest successRequest = new SuccessRequest();
    String out_trade_no = params.get("out_trade_no");
    String trade_no = params.get("trade_no");
    String total_amount = params.get("total_amount");

    System.out.println("out_trade_no==="+out_trade_no);
    System.out.println("trade_no==="+trade_no);
    System.out.println("total_amount==="+total_amount);

    successRequest.setId(0);
    successRequest.setKeyword("验签成功");


    return params;
}

填写支付信息页面

订单id<input type="text" name = "oid" id = "oid"/>
订单名称<input type="text" name = "oname" id = "oname"/>
付款金额<input type="text" name = "money" id = "money"/>
描述<input type="text" name = "desc" id = "desc"/>
<input type="button" value="付款" onclick="pay()">

脚本

function pay() {
    var oid = $("#oid").val();
    var oname = $("#oname").val();
    var money = $("#money").val();
    var desc = $("#desc").val();
    $.post("pay",{oid:oid,oname:oname,money:money,desc:desc},function (data) {
        console.info(data);
        if(data.id==0){
            $("#div").append(data.callback);
        }else if(data.id==1){
            $("#div").append("验签失败");
            console.info("验签失败");
        }else if(data.id==2){
            $("#div").append("用户已支付");
            console.info("用户已支付");
        }
    });
}

备注

该代码属于沙箱环境下完成测试,改为正式的支付,只需把网关换成https://openapi.alipay.com/gateway.do

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值