微信公众号调用沙箱支付

news2024/11/18 21:36:04

沙箱支付

登录支付宝开放平台,选择底部沙箱支付
在这里插入图片描述下载密钥生成工具
在这里插入图片描述生成应用私钥与公钥,上传沙箱支付,获得支付宝公钥
在这里插入图片描述在这里插入图片描述

配置支付通知与支付回调地址
在这里插入图片描述

SpringBoot配置

yml文件

在这里插入图片描述这里的地址必须与沙箱配置的一样
controller

package com.zq.wx.controller;

import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.zq.wx.entity.DonaEntity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

//调用支付宝支付
@Controller
public class AlipayController {
    @Value("${alipay.appId}")
    private String appId;
    @Value("${alipay.appPrivateKey}")
    private String appPrivateKey;
    @Value("${alipay.charSet}")
    private String charSet;
    @Value("${alipay.alipayPublicKey}")
    private String alipayPublicKey;
    @Value("${alipay.signType}")
    private String signType;
    @Value("${alipay.getewayUrl}")
    private String getewayUrl;

    @Value("${alipay.notifyUrl}")
    private String notifyUrl;

    @Value("${alipay.returnUrl}")
    private String returnUrl;

    @Value("${alipay.format}")
    private String format;


    @ResponseBody
    @PostMapping("/alipay/pay")
    public String alipay(HttpSession session,
                         @RequestBody DonaEntity donaEntity) throws AlipayApiException {
        //把dona_id项目id 放在session中
        session.setAttribute("dona_id",donaEntity.getDonaId());
        //生成订单号(支付宝的要求?)
        String time = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        String user = UUID.randomUUID().toString().replace("-","").toUpperCase();
        String OrderNum = time+user;
        //调用封装好的方法(给支付宝接口发送请求)
        return sendRequestToAlipay(OrderNum,donaEntity.getDonaMoney(),"测试商品");
    }
    /*
    参数1:订单号
    参数2:订单金额
    参数3:订单名称
     */
    //支付宝官方提供的接口
    private String sendRequestToAlipay(String outTradeNo, Float totalAmount, String subject) throws AlipayApiException {
        //获得初始化的AlipayClient
        AlipayClient alipayClient = new DefaultAlipayClient(getewayUrl,appId,appPrivateKey,format,charSet,alipayPublicKey,signType);

        //设置请求参数
        AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
        //支付成功异步地址
        alipayRequest.setNotifyUrl(notifyUrl);
        alipayRequest.setReturnUrl(returnUrl);
        //商品描述(可空)
        String body="";
        alipayRequest.setBizContent("{\"out_trade_no\":\"" + outTradeNo + "\","
                + "\"total_amount\":\"" + totalAmount + "\","
                + "\"subject\":\"" + subject + "\","
                + "\"body\":\"" + body + "\","
                + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");

        //请求
        String result = alipayClient.pageExecute(alipayRequest).getBody();
        return result;
    }

    //异步通知地址
    @RequestMapping("/alipay/notifyUrl")
    public String notifyUrl(){
        return "alipay/notify";
    }

    //回调地址
    @RequestMapping("/alipay/returnUrl")
    public String returnUrl(){
        return "alipay/return";
    }

前端html ajax 请求

// 发送 AJAX 请求
            $.ajax({
                url: '/alipay/pay', // 后端接收数据的接口地址
                type: 'POST', // 请求类型,通常是 POST
                contentType: 'application/json', // 告诉后端你发送的是 JSON 格式的数据
                data: JSON.stringify({ // 将 JavaScript 对象转换为 JSON 字符串
                    donaId: 1008111,
                    donaMoney: 100.00,
                }),
                success: function(response) {
                    // 请求成功时的回调函数,沙箱返回html代码,这里要跳转新页面
                    const div = document.createElement('divform');
                    div.innerHTML = response;
                    document.body.appendChild(div);
                    document.forms['punchout_form'].setAttribute('target', '_blank')
                    document.forms['punchout_form'].submit()
                },
                error: function(xhr, status, error) {
                    // 请求失败时的回调函数
                    console.error('Error:', error);
                }
            });

ajax发送请求,页面跳转
在这里插入图片描述
输入沙箱买家测试号
在这里插入图片描述支付成功,等待几秒,跳转自己的回调页面
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1509190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用Python进行自动化测试和性能测试

在Python中,我们可以使用多种库和工具来执行自动化测试和性能测试。下面是一些示例代码,用于展示如何使用Python进行这两种类型的测试。 自动化测试 自动化测试通常使用诸如unittest或pytest这样的Python测试框架来执行。下面是一个使用unittest进行自…

RK3568驱动指南|第十三篇 输入子系统-第139章 输入子系统数据结构介绍

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

做抖音小店需要交钱吗?有门槛吗?都有哪些入驻条件和费用?

大家好,我是电商花花。 在抖音上开店已经成为很多人追逐的方向,因为这些人都看到别人在抖音上赚到钱,然后也想在抖音上尝试一下。 然而,许多人心中仍然存着一个问题,就是做抖音小店需要交钱吗?是否存在门…

长期异地就医备案有效期是多久?答记者问!

4、长期异地就医登记的有效期是多长? 答:异地长期就医登记长期有效。 如果您因个人原因需要变更长期居住地,只需提供相应的登记信息即可申请变更。 5、临时异地就医登记的有效期是多长时间? 答:临时异地就医登记包括…

《ElementPlus 与 ElementUI 差异集合》el-form-item CSS 属性 display 有变化

差异 element-ui el-form 中,属性display: flex; 导致元素在一排;element-plus el-form 中,属性display: block; 元素按照自己的属性排列; /* element ui */ display: block;/*element plus */ display: flex;如图所示 解决方案…

web基础05-jQuery

目录 一、jQuery 1.概述 2.原生js与jQuery对比 3.特点 4.使用 (1)入口函数 (2)语法 (3)jQuery选择器 5.方法 (1)获取属性值: (2)删除属…

在手机上欣赏无人直播,享受美好时光!

在这个充满着快节奏、高压力的现代社会中,人们经常感到身心疲惫,渴望找到一些放松和享受美好时光的方式。而随着科技的不断发展,手机已经成为人们生活中必不可缺的工具之一,为我们带来了诸多便利。其中,无人直播就是一…

MS5583N高分辨率模数转换器

产品简述 MS5583N 是一款高分辨率模数转换器,内部集 成高阶 Σ-Δ 调制器、低噪声可编程增益放大器、多 路输入选择器和多种内部数字滤波器。其转换速率 从 250SPS 到 4kSPS 。此外,芯片内部集成失调校准 寄存器和增益校准寄存器。 MS5583N …

精品基于Springboot的聊天交友系统的设计与实现

《[含文档PPT源码等]精品基于Springboot的聊天交友系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术&#xf…

2023年中国高校大数据挑战赛D题参考论文发布(全网首发)

腾讯文档】2023年大数据挑战赛资料说明 https://docs.qq.com/doc/DSEpWUVFySm1ObFB0 基于数据分析的行业职业技术培训能力评价 摘要 中国是制造业大国,产业门类齐全,每年需要培养大量的技能娴熟的技术工人进入工厂。本文将基于题目给出的数据&#x…

力扣--动态规划5.最长回文子串

class Solution { public:string longestPalindrome(string s) {// 获取输入字符串的长度int n s.size();// 如果字符串长度为1,直接返回原字符串,因为任何单个字符都是回文串if (n 1)return s;// 创建一个二维数组dp,用于记录子串是否为回…

AI生成对抗网络的解释

了解生成对抗网络 (GAN) 的不同方面和复杂性,GAN 是一种在人工智能 (AI) 领域内外使用的神经网络。本文将向您介绍 GAN,介绍什么是 GAN,并解释如何使用它们。 GAN简介 今天对称为 GAN 的通用模…

eclipse maven 项目导入报错

错误:Internal compiler error: java.lang.NullPointerException at org.eclipse.jdt.internal.compiler.apt.dispatch.AnnotationDiscoveryVisitor 环境:eclipse Kepler Service Release 2 ,JDK1.7 解决办法:编码不对,修改

惠海H5118舞台灯芯片方案 RGBW共阳12V/24V/36V大功率 无频闪

H5118是一款外围电路简单的多功能平均电流型LED恒流驱动器,适用于5-48V电压范围的非隔离式大功率恒流LED驱动领域。芯片采用了平均电流模式控制,输出电流精度在3%;输出电流对输入输出电压以及电感不敏感;芯片内部集成了…

鸿蒙开发岗位,面试到底问些啥?

随着春天的脚步临近,一年度的面试旺季却也已开始。就在2 月 28 日,”智联招聘崩了“登上微博热搜。有网友感叹,现在找工作太难了,发现有这么多人在竞争更焦虑了。 对此智联招聘回应称,由于求职流量新高,服务…

XWPFDocument中XmlCursor的使用

类名&#xff1a; org.apache.xmlbeans Interface XmlCursor版本&#xff1a; 原xml代码&#xff1a; <w:p w14:paraId"143E3662" w14:textId"4167FBA7" w:rsidR"001506F2" w:rsidRPr"003F3D89" w:rsidRDefault"001506F2&qu…

神经网络实战前言(补充)

深度学习 深度学习是特殊的机器学习&#xff0c;使用复杂的、多层神经网络进行学习。深度神经网络&#xff08;DNN&#xff09;&#xff0c;每层学习的信息的复杂度是不断增加的。例如面部识别&#xff0c;第一层识别眼睛、第二层识别鼻子&#xff0c;直到所有的面部特征识别完…

算法-贪心-112. 雷达设备

题目 假设海岸是一条无限长的直线&#xff0c;陆地位于海岸的一侧&#xff0c;海洋位于另外一侧。 每个小岛都位于海洋一侧的某个点上。 雷达装置均位于海岸线上&#xff0c;且雷达的监测范围为 d&#xff0c;当小岛与某雷达的距离不超过 d 时&#xff0c;该小岛可以被雷达覆…

Crow 编译和环境搭建

Crow与其说是编译&#xff0c;倒不如说是环境搭建。Crow只需要包含头文件&#xff0c;所以不用编译生成lib。 Crow环境搭建 boost&#xff08;可以不编译boost&#xff0c;只需要boost头文件即可&#xff09;asio &#xff08;可以不编译&#xff0c;直接包含头文件。不能直接…

蜂窝物联:智慧养猪解决方案

一、现状 随着我国养猪业的不断发展&#xff0c;一线从业人员逐渐减少&#xff0c;投资者和养殖者的收益需求却越来越高。当前&#xff0c;我国养猪业正处在转型升级的关键时期&#xff0c;环境压力巨大、资源约束趋紧、“猪周期”变化莫测等问题日益凸显。而经过非瘟之后&…