PC端支付宝支付接口实现

首先要2个jar包

一个是alipay-sdk--java-4.9.79.ALL.jar

一个是aliyun-java-sdk-dysmsapi-1.0.0

基本配置信息:

package com.zhetian.www.alibaba;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @Copyright (C)遮天网络有限公司
 * @Author: YUAN HUAI XING
 * @Date 2020/3/31 17:34
 * @Descripthion:
 **/

public class AlipayConfig{
//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号
    public static String app_id = "";

    // 商户私钥,您的PKCS8格式RSA2私钥
    public static String merchant_private_key ="";

    // 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。
    public static String alipay_public_key = "";

    // 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String notify_url = "";

    // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
    public static String return_url = "";

    // 签名方式
    public static String sign_type = "RSA2";

    // 字符编码格式
    public static String charset = "utf-8";

    // 支付宝网关
    public static String gatewayUrl ="http://openapi.alipaydev.com/gateway.do";

    // 支付宝网关
    public static String log_path = "C:\\";

//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    /**
     * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
     * @param sWord 要写入日志里的文本内容
     */
    public static void logResult(String sWord) {
        FileWriter writer = null;
        try {
            writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
            writer.write(sWord);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    public static String getorderNo() {
        String num = "";
        for (int i = 0 ; i < 10 ; i ++) {
            num = num + String.valueOf((int) Math.floor(Math.random() * 9 + 1));
        }
        return num;
    }
}

调用支付接口

package com.zhetian.www.alibaba;

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.response.AlipayTradePagePayResponse;

import java.util.HashMap;

/**
 * @Copyright (C)遮天网络有限公司
 * @Author: YUAN HUAI XING
 * @Date 2020/3/31 18:34
 * @Descripthion:
 **/

public class AliPayServer {

    public String pay(String orderOn, Integer productPrice, String productName) throws Exception {
        AlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl,
                AlipayConfig.app_id, AlipayConfig.merchant_private_key,
                "json", AlipayConfig.charset, AlipayConfig.alipay_public_key, AlipayConfig.sign_type);
        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        alipayRequest.setReturnUrl(AlipayConfig.return_url);  //设置同步回调通知
        alipayRequest.setNotifyUrl(AlipayConfig.notify_url);  //设置异步回调通知
        //设置支付参数

        HashMap<Object, Object>  hashMap = new HashMap<>();
       hashMap.put("out_trade_no",orderOn);
       hashMap.put("total_amount",productPrice);
       hashMap.put("subject",productName);
       hashMap.put("product_code","FAST_INSTANT_TRADE_PAY");
       hashMap.put("timeout_express", "90m");
       String s1 = JSON.toJSONString(hashMap);

       alipayRequest.setBizContent(s1);

       String s="";
        System.out.println(s);
        //请求
        try {
            AlipayTradePagePayResponse execute = alipayClient.pageExecute(alipayRequest);
            s = JSON.toJSONString(execute);
            System.out.println(s);

        } catch (AlipayApiException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return s;

    }

}

点击购买跳转支付宝支付接口

    /**
     * 点击购买执行操作
     * @return
     */
    @RequestMapping("/listData")
    @ResponseBody
    public Result listData(HttpServletRequest request, Integer id, Order order, HttpServletResponse response) throws Exception {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        Result result = new Result();
        //1.接收商品id
        Product product = productService.ProductById(id);
        //2.根据商品id,获取价格,subject 产品名称
        String productName = product.getProductName();//产品名称
        Integer productPrice = product.getProductPrice();//产品价格
        // 1-等待支付,2-支付失败,3-支付成功
        String state ="2";
        HttpSession session = request.getSession();
        LoginUser data = (LoginUser)session.getAttribute("data");
        String userName = data.getUserName();
        LoginUser loginUser = loginUserService.UserByuserName(userName);
        Integer userId = loginUser.getId();//获取用户id
        //3.创建订单  支付状态 等待支付
        String orderNo = getorderNo();
        order.setUserId(userId);
        order.setProductId(id);
        order.setOrderOn(orderNo);
        order.setProductName(productName);
        order.setProductPrice(productPrice);
        order.setState(state);
        Date date = new Date();
        order.setCreateTime(date);
        orderService.saveOrder(order);
        //4.向支付宝获取支付信息
        request.setAttribute("orderNo",orderNo);
        AliPayServer aliPayServer = new AliPayServer();
        String pay = aliPayServer.pay(orderNo, productPrice, productName);
        JSONObject jsonObject = JSON.parseObject(pay);
        String body = jsonObject.getString("body");
        result.setData(body);
         return  result;
    }

同步异步返回:

package com.zhetian.www.controller;

import com.alipay.api.internal.util.AlipaySignature;
import com.zhetian.www.alibaba.AlipayConfig;
import com.zhetian.www.model.Order;
import com.zhetian.www.service.impl.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import static com.zhetian.www.alibaba.AlipayConfig.alipay_public_key;

@Controller
@RequestMapping("/callback")
public class PayCallBackController {
    @Autowired
    private OrderService orderService;

    /**
     * 同步回调
     *
     * @param request
     * @throws Exception
     */
    @ResponseBody
    @RequestMapping("/returnUrl")
    public ModelAndView returnUrl(HttpServletRequest request) throws Exception {
        ModelAndView mav = new ModelAndView();
            System.out.println("前往支付成功页面");
            mav.setViewName("/tick/list");
        return mav;
    }

    /**
     * 支付宝服务器异步通知
     *
     * @param request
     * @throws Exception
     */
    @RequestMapping("/notifyUrl")
    @ResponseBody
    public String notifyUrl(HttpServletRequest request) throws Exception {
        // 获取支付宝GET过来反馈信息
        Map<String, String> params = new HashMap<String, String>();
        Map<String, String[]> requestParams = request.getParameterMap();
        for (Iterator<String> 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);
        }

        boolean signVerified = AlipaySignature.rsaCheckV1(params, alipay_public_key, AlipayConfig.charset,
                AlipayConfig.sign_type); // 调用SDK验证签名

        if (signVerified) { // 验证成功 更新订单信息
            System.out.println("异步通知成功");
            // 1.商户订单号
            String orderOn = request.getParameter("out_trade_no");

//            // 2.交易状态
           String trade_status = request.getParameter("trade_status");
            if (trade_status.equals("TRADE_SUCCESS")){
                //3.订单号和支付状态修改订单
                // 修改数据库
                Order order = new Order();
                order.setState("3");
                Date date = new Date();
                order.setUpdateTime(date);
                order.setOrderOn(orderOn);
                orderService.updaetOrder(order);
                return "success";
            }
            return "fail";
        } else {
            System.out.println("异步通知失败");
            return "fail";
        }
    }
@注:本博客仅为个人学习笔记。 所属人:Yuan 

原文地址:https://www.cnblogs.com/zhetiankj/p/12661534.html

时间: 2024-11-05 14:55:31

PC端支付宝支付接口实现的相关文章

pc 端支付宝支付流程

用户在商户网站上完成支付 一.商户申请流程和业务场景 即时到账:网上交易时,买家的交易资金直接打入卖家支付宝账户,快速回笼交易资金. 申请条件: 1) 申请前必须拥有经过实名认证的支付宝账户: 2) 企业或个体工商户可申请: 3) 需提供真实有效的营业执照,且支付宝账户名称需与营业执照主体一致: 4) 网站能正常访问且页面显示完整,网站需要明确经营内容且有完整的商品信息: 5) 网站必须通过ICP备案.如为个体工商户,网站备案主体需要与支付宝账户主体名称一致: 6) 如为个体工商户,则团购不开放

支付宝支付接口的调用(转)

支付宝支付接口的调用 2018年04月07日 17:54:51 Forward_duyu 阅读数:15167 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zoroduyu/article/details/79825880 应公司业务要求,需要调用支付宝的支付接口进行支付的操作,于是将整个调用过程用博客形式记录下来,以供以后使用. 本次调用支付宝采用的是电脑支付,官方文档页面如下: 电脑端调用支付宝,流程很简单,在页面有一个立即支付的按钮,点击

php编程之如何调用支付宝支付接口的实现

对于任何一款软件来说,支付功能都是核心的,那么目前的主流支付接口主要是支付宝.微信和银联卡,而大多数开发技术人员对于如何调用支付宝的支付接口还存在很大的困扰,今天就来跟大家分享一下如何正确调用支付宝支付接口的实现,代码如下所示:public function zfbpay1(){require_once './ThinkPHP/Extend/Vendor/alipay1/config.php';require_once './ThinkPHP/Extend/Vendor/alipay1/page

对接支付宝支付接口开发详细步骤(证书签名方式)

对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学,一点思路吧.需要思路的可以私聊我 两大支付平台感觉都有坑人之处吧(终归是学艺不精,哈哈哈哈!!) 不过支付宝相做的较好的一点是有技术和你在线调试,这就很舒服,哈哈. 寻找技术地址:支付宝开放平台 - 开发者中心 - 网页&移动应用 - 右边有个立即咨询 - 智能问答(多发送几次就有技术出来了) 第一步:(先要在支付宝进行操做,拿到我们需要开发

客服端与服务端APP支付宝支付接口联调的那些坑

根据支付宝官方提供的文档的建议: TIPS:这一步应在商户服务端完成,商户服务端直接将组装和签名后的请求串orderString传给客户端,客户端直接传给SDK发起请求.文档和Demo是为了示例效果在客户端实现. 商品的订单信息和签名应该放在服务端进行,将最好生成的orderString发送给客户端,客户端直接换起支付,处理好回调就ok.思路很简单,但实现却要下番功夫. 坑一: 如果以PHP为服务后台为例,官网是没有提供集成好的PHP运行DEMO,我们的处理方式是参展APPDemo里的思路,和官

支付宝支付接口开发

1.简单点说就是调用支付宝那边的接口方法,然后传递数据过去,之后会返回一个是否成功的值,然后你拿到之后判断就好了 2.首先你得有淘宝的商铺的合作身份ID,和Key,这个key就是你的密钥.当你的表单提交的时候,表单中的参数会根据这个key来md5加密,同明文参数一同发送到支付宝那边的,然后支付宝那边根据你的key(他们是知道你的key的.因为这个key是他们给你的)来再次加密你的明文参数.如果加密后的数据和你一起传递的密文是相同的话则表示数据在传输过程中没有被修改,就会处理你的请求...处理完之

PHP TP5框架-手机APP端支付宝支付

最近应业务需求,做了支付宝支付和微信支付,今天分享一下手机端app支付宝支付对接流程,实际开发过程是前后端分离,前端调用后端API接口,实现功能返回数据,我所用的跨挤啊为TP5,大致可以分为四步: 1.在蚂蚁金服开放平台创建应用,签约商户,生成应用公钥和私钥: 2.配置统一下单支付参数: 3.整合支付宝demo类文件: 4.创建Alipay支付类,类内创建两个方法(alipay_app:统一下单方法和alipay_notify:支付成功异步回调方法); 第一步主要是在蚂蚁金服开放平台登录你的支付

Java调用支付宝支付接口

一.场景:公司需要在网站上进行支付宝支付. 二.API:使用支付宝开放平台的支付能力-即时到账接口.支付宝开放平台链接 三.分析: 1.支付宝的文档比较容易看,主要是有相应的DEMO,我这里看的DEMO是 JAVA-UTF-8版本. ? 2.导入DEMO,在com.alipay.config中填入对应的partner和key(在对应的商户后台获取)就可以直接运行了解支付流程了. ? 3.改写:我这边使用的是springmvc+mybatis.商品发起购买(走支付宝支付).跳转到支付宝.支付宝回调

支付宝支付接口功能

官方文档:https://doc.open.alipay.com/docs/doc.htm?treeId=203&articleId=105288&docType=1 支付宝支付功能申请条件 一.实名支付宝账号. 二.要求是企业账户. 三.已经签约手机支付功能. Linux环境下生成RSA私钥和公钥 https://doc.open.alipay.com/doc2/detail?treeId=44&articleId=103242&docType=1 命令行: openss