您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

web端网站接入支付宝支付过程

时间:2020-02-22 10:40:11  来源:  作者:

1、在支付宝开放平台(https://open.alipay.com/platform/home.htm)申请对应的功能

web端网站接入支付宝支付过程

 

找到页或者移动应用列表

web端网站接入支付宝支付过程

 

你可以看到你已申请的应用

点击进入应用详情增加功能:

web端网站接入支付宝支付过程

 

2、在自己的JAVAweb应用里引入对应的jar包

      <!--阿里支付SDK-->
      <dependency>
          <groupId>com.alipay.sdk</groupId>
          <artifactId>alipay-sdk-java</artifactId>
          <version>4.3.0.ALL</version>
      </dependency>

3、支付宝相关配置信息

可根据自己的情况配置相关的内容,下面只作为相关示意

package com.fast.tpp.dto;

public class AlipayConfig {

        /**
         * 签约的支付宝账号对应的支付宝唯一用户号,以2088开头的16位纯数字组成
         */
        public static final String PID = "xx";

        /**
         * 正式环境请求地址
         */
        public static String ALIPAY_URL = "https://openapi.alipay.com/gateway.do";

        /**
         * 支付宝分配给开发者的应用ID
         *
         */
        public static String App_ID = "xx";

        /**
         * 仅支持JSON
         */
        public static String FORMAT = "JSON";

        /**
         * 请求使用的编码格式
         */
        public static String CHARSET = "utf-8";

        /**
         * 商户生成签名字符串所使用的签名算法类型
         */
        public static String SIGN_TYPE = "RSA2";

        /**
         * 支付宝公钥
         */
        public static String ALIPAY_PUBLIC_KEY =xx";
        /**
         * 商户私钥
         */
        public static String PRIVATE_KEY =xx";

        /**
         * 回调地址
         */
        public static String CALLBACK_URL = "xx";

        /**
         * web支付跳转地址
         */
        public static String WEB_RETURN_URL = "xx";

}

4、初始化阿里支付相关配置,只贴部分代码作参考

@Service
@Log4j2
public class AlipaySaoImpl implements AlipaySao {

    @Autowired
    private redisService redisService;


    // 实例化客户端
    AlipayClient alipayClient;

    public AlipaySaoImpl(){
        // 实例化客户端
        alipayClient = new DefaultAlipayClient(
                AlipayConfig.ALIPAY_URL,
                AlipayConfig.APP_ID,
                AlipayConfig.PRIVATE_KEY,
                AlipayConfig.FORMAT,
                AlipayConfig.CHARSET,
                AlipayConfig.ALIPAY_PUBLIC_KEY,
                AlipayConfig.SIGN_TYPE);
    }

5、web支付相关方法代码

package com.fast.tpp.dto;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

@Setter
@Getter
@ToString
public class AlipayWebPayDTO
{
    /**
     * 商户订单号,必填
     *
     */
    private String out_trade_no;
    /**
     * 订单名称,必填
     */
    private String subject;
    /**
     * 付款金额,必填
     * 根据支付宝接口协议,必须使用下划线
     */
    private String total_amount;
    /**
     * 商品描述,可空
     */
    private String body;
    /**
     * 超时时间参数
     */
    private String timeout_express= "5m";
    /**
     * 产品编号
     */
    private String product_code= "FAST_INSTANT_TRADE_PAY";

}


 /**
     * web支付接口
     * @param alipayBean
     * @return
     * @throws AlipayApiException
     */
    @Override
    public String webPagePay(AlipayWebPayDTO alipayBean) throws AlipayApiException {
        // 2、设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        // 页面跳转同步通知页面路径
        alipayRequest.setReturnUrl(AlipayConfig.WEB_RETURN_URL);
        // 服务器异步通知页面路径
        alipayRequest.setNotifyUrl(AlipayConfig.CALLBACK_URL);
        // 封装参数
        alipayRequest.setBizContent(JSON.toJSONString(alipayBean));
        // 3、请求支付宝进行付款,并获取支付结果
        String result = alipayClient.pageExecute(alipayRequest).getBody();
        // 返回付款信息
        return result;
    }

6、最终返回给客户端的result值为,里面是一个form,页面拿到后会自动跳转到支付宝的订单支付页面

{
	"code": "00",
	"msg": "请求成功!",
	"data": {
		"orderString": "<form name="punchout_form" method="post" action="https://openapi.alipay.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=G0jsaTORXtfF1VkQEK77qu%2BnYRU1YhCNQMFiWNNBUbYgQz8pxGRGVcnzbIXWkgWawV3AXco%2BJkFEemhV7qK2ALIn6uVziNklV6Folqb6OyVnsdKdCfHbID%2Bz79M1ngpyWsWvxXoAUN6Kuib5qkurDPQfMo4HWF4fxmLF70cFkQNeHxg577ByHS0%2Borv%2BzJ%2FwqehZZqOB1JQ0jzserODf2PGieoE5PCDnIYuXMZFqJqlCRUDc1IN3h9Usez8QJhLWepcFDsDR8tXiHrMmge9onHAl9bpLUtyOuVe4TCMU%2BLgMH21NUpeKJdXgQpnQxA8DoUuU0lRTmvPEp6EyXAmE%2FQ%3D%3D&return_url=http%3A%2F%2Fwww.moyou520.com%2Fdist%2Fhtml%2Fpay%2Fresult.html¬ify_url=http%3A%2F%2Fadmin.moyou520.com%2Fmoyou%2Fapp%2Ftrans%2FalipayNotice.do&version=1.0&app_id=2019081066129967&sign_type=RSA2×tamp=2020-02-17+15%3A58%3A24&alipay_sdk=alipay-sdk-java-4.3.0.ALL&format=JSON">n<input type="hidden" name="biz_content" value="{"body":"购买[年度VIP]","out_trade_no":"20200217155823617499935","product_code":"FAST_INSTANT_TRADE_PAY","subject":"默友APP","timeout_express":"5m","total_amount":"0.0"}">n<input type="submit" value="立即支付" style="display:none" >n</form>n<script>document.forms[0].submit();</script>",
		"orderNo": "20200217155823617499935"
	}
}

7、回调方法相关代码

/**
	 * 支付宝支付通知
	 * @param request
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value="/alipayNotice.do",method = RequestMethod.POST)
	@ResponseBody
	@NoneAuth
	@SysLog(actionName = "支付宝支付通知")
	public String alipayNotice(HttpServletRequest request, HttpServletResponse response) throws IOException {
		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);
		}
		// 切记alipaypublickey是支付宝的公钥,请去open.alipay.com对应应用下查看。
		try {
			boolean flag = AlipaySignature.rsaCheckV1(params, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.CHARSET,
					AlipayConfig.SIGN_TYPE);
			if (flag) {
				String tradeStatus = params.get("trade_status");
				String outTradeNo = params.get("out_trade_no");
				String tradeNo = params.get("trade_no");
				//购买者用户ID
				String openId = params.get("buyer_logon_id");
				this.orderService.alipayNotice(tradeStatus,outTradeNo,tradeNo,openId);
				if ("TRADE_SUCCESS".equals(tradeStatus)){
					return "success";
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "fail";
	}

大致如上,欢迎大家批评指正



Tags:web端   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
介绍FilePond是一个JavaScript库,它提供流畅的拖放文件上传功能。可以上传任何你扔在它上面的东西,优化图像以便更快地上传,并提供一个非常优雅的、可靠的、平滑的用户体验。...【详细内容】
2020-11-23  Tags: web端  点击:(188)  评论:(0)  加入收藏
1、在支付宝开放平台(https://open.alipay.com/platform/home.htm)申请对应的功能 找到页或者移动应用列表 你可以看到你已申请的应用点击进入应用详情增加功能: 2、在自己的ja...【详细内容】
2020-02-22  Tags: web端  点击:(74)  评论:(0)  加入收藏
在web开发中常常会遇到前后端通信的情况出现,甚至是双向通信,类似于聊天室的功能,那么今天的主角就是Socket.IO什么是Socket.IO?官网:https://socket.io/ github地址:https://gi...【详细内容】
2019-07-29  Tags: web端  点击:(291)  评论:(0)  加入收藏
案例由于业务的需要,需求方需要实现一个大量图片同时加载的需求。在实现这个需求的过程中,可能会遇到很多的坑,这里小编也总结了一些优化方案,我们可以一起来看看。具体场景在...【详细内容】
2019-07-01  Tags: web端  点击:(515)  评论:(0)  加入收藏
▌简易百科推荐
本文分为三个等级自顶向下地分析了glibc中内存分配与回收的过程。本文不过度关注细节,因此只是分别从arena层次、bin层次、chunk层次进行图解,而不涉及有关指针的具体操作。前...【详细内容】
2021-12-28  linux技术栈    Tags:glibc   点击:(3)  评论:(0)  加入收藏
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(2)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(10)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(20)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(25)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(25)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条