NodeJS实现支付宝沙箱支付②③

文章目录

  • 前言
  • 版权声明
  • Alipay SDK 沙箱环境简介
  • Node环境要求
  • 沙箱环境配置
  • 下载所需模块
  • 准备前端静态页面以及Node服务器
  • 文件夹规范
  • AlipaySdk 配置准备
  • AlipaySdk 代码演示
  •    Alipay实例化 ~ alipay.sdk 文件
  •    AlipayForm ~ alipayForm文件
  •    AlipayFormStatus ~ alipayForm文件
  •    AlipayForm文件 ~ 完整代码
  • 使用沙箱
  • 效果演示
  • AlipaySdk API ~
  • 最后


                    ⡖⠒⠒⠒⠤⢄⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸   ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦⢤⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠋⠉⠉⠓⠛⠿⢷⣶⣦⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢠⠇⠀⠀⠀⠀⠀⠀⠘⡇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡞⠀⠀⠀⠀⠀⠀⠀⢰⠇⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡴⠊⠉⠳⡄⠀⢀⣀⣀⡀⠀⣸⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠰⠆⣿⡞⠉⠀⠀⠉⠲⡏⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠈⢧⡀⣀⡴⠛⡇⠀⠈⠃⠀⠀⡗⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⣿⣱⠃⡴⠙⠢⠤⣀⠤⡾⠁⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⢀⡇⣇⡼⠁⠀⠀⠀⠀⢰⠃⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⣸⢠⣉⣀⡴⠙⠀⠀⠀⣼⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⡏⠀⠈⠁⠀⠀⠀⠀⢀⡇⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠃⠀⠀⠀⠀⠀⠀⠀⡼⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⢸⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣀⠤⠚⣶⡀⢠⠄⡰⠃⣠⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⢀⣠⠔⣋⣷⣠⡞⠀⠉⠙⠛⠋⢩⡀⠈⠳⣄⠀⠀⠀⠀⠀⠀⠀
⠀⡏⢴⠋⠁⠀⣸⠁⠀⠀⠀⠀⠀ ⠀⣹⢦⣶⡛⠳⣄⠀⠀⠀⠀⠀
⠀⠙⣌⠳⣄⠀⡇   不能   ⡏⠀⠀  ⠈⠳⡌⣦⠀⠀⠀⠀
⠀⠀⠈⢳⣈⣻⡇   白嫖 ⢰⣇⣀⡠⠴⢊⡡⠋⠀⠀⠀⠀
⠀⠀⠀⠀⠳⢿⡇⠀⠀⠀⠀⠀⠀⢸⣻⣶⡶⠊⠁⠀⠀
⠀⠀⠀⠀⠀⢠⠟⠙⠓⠒⠒⠒⠒⢾⡛⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⣠⠏⠀⣸⠏⠉⠉⠳⣄⠀⠙⢆⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⡰⠃⠀⡴⠃⠀⠀⠀⠀⠈⢦⡀⠈⠳⡄⠀⠀⠀⠀⠀⠀⠀
⠀⠀⣸⠳⣤⠎⠀⠀⠀⠀⠀⠀⠀⠀⠙⢄⡤⢯⡀⠀⠀⠀⠀⠀⠀
⠀⠐⡇⠸⡅⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⡆⢳⠀⠀⠀⠀⠀⠀
⠀⠀⠹⡄⠹⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣇⠸⡆⠀⠀⠀⠀⠀
⠀⠀⠀⠹⡄⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡀⣧⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢹⡤⠳⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣷⠚⣆⠀⠀⠀⠀
⠀⠀⠀⡠⠊⠉⠉⢹⡀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡎⠉⠀⠙⢦⡀⠀
⠀⠀⠾⠤⠤⠶⠒⠊⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠙⠒⠲⠤⠽   

前言

  1. Node.js是一个javascript运行环境。它让javascript可以开发后端程序,实现几乎其他后端语言实现的所有功能,可以与```PHP、Java、Python、.NET、Ruby等后端语言平起平坐。
  2. Nodejs是基于V8引擎,V8是Google发布的开源JavaScript引擎,本身就是用于Chrome浏览器的JS解释,但是Node之父 Ryan Dahl在这里插入图片描述把这V8搬到了服务器上,用于做服务器的软件。

版权声明

在这里插入图片描述

Copyright © [SYFStrive],未经许可,禁止转载 ~~~

Alipay SDK 沙箱环境简介

沙箱环境 : 是协助开发者进行功能测试,模拟了开放平台产品的主要功能,逻辑。可用于在产品上线前进行功能测试。

Node环境要求

Node.js 8 以上版本

沙箱环境配置

官方 : https://openhome.alipay.com/

配置步骤 :使用支付宝登录 👉 进入我的控制台 👉 下方的开发工具推荐 点击沙箱 👉 沙箱应用 启动公钥模式 👉 获取公钥和私钥 网关地址

下载所需模块

npm install koa

npm install koa-router

npm install alipay-sdk

npm install koa koa-router alipay-sdk

准备前端静态页面以及Node服务器

  • 静态页面
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://cdn.jsdelivr.net/npm/axios@1.1.2/dist/axios.min.js"></script>
    <title>支付宝沙箱支付</title>
</head>

<body>
    <button>支付宝</button>
</body>
<script>

    const but = document.querySelector('button')
    but.addEventListener('click', () => {
        axios({
            method: 'get',
            url: 'http://127.0.0.1:8000/payment'
        }).then(reason => {
            console.log(reason.data);
        })
    })
</script>

</html>
  • Node服务器
const koa = require("koa");
const app = new koa();//实例
const koaRouter = require('koa-router')
const router = new koaRouter()

router.get("/payment", (ctx, next) => {
    ctx.set('Access-Control-Allow-Origin', '*')
    ctx.set('Access-Control-Allow-Methods', "OPTIONS, GET, PUT, POST, DELETE")
    ctx.body = ({
        code: 200
    })
    next()
})

app.use(router.routes(), router.allowedMethods())
app.listen(8000, function () {
    console.log("HTTP服务已启动");
})

文件夹规范

在这里插入图片描述
在这里插入图片描述

AlipaySdk 配置准备

初始化 SDK 准备参数 👇

  • 公钥证书模式(推荐): appId、应用私钥、应用公钥证书文件、支付宝公钥证书文件、支付宝证书文件
  • 公钥模式:appId、应用私钥、应用公钥、支付宝公钥

AlipaySdk 代码演示

   Alipay实例化 ~ alipay.sdk 文件

  • 封装配置方法
const AlipaySdk = require('alipay-sdk').default
const fs = require('fs')
// 普通公钥模式
const alipaySdk = new AlipaySdk({
    appId: '2021000122664484', //开放平台上创建应用时生成的 appId
    signType: 'RSA2',//签名算法,默认 RSA2
    gateway: 'https://openapi.alipaydev.com/gateway.do',//支付宝网关地址
    privateKey: fs.readFileSync('private-key.pem', 'ascii'),//应用私钥
    alipayPublicKey: fs.readFileSync('alipay-public-key.pem', 'ascii'),//支付宝公钥
});

// 证书模式
// const alipaySdk = new AlipaySdk({
//   appId: '2021000122664484',
//   privateKey: fs.readFileSync('private-key.pem', 'ascii'),
//   // 传入支付宝根证书、支付宝公钥证书和应用公钥证书。
//   alipayRootCertPath: path.join(__dirname, 'alipayRootCert.crt'),
//   alipayPublicCertPath: path.join(__dirname, 'alipayCertPublicKey_RSA2.crt'),
//   appCertPath: path.join(__dirname, 'appCertPublicKey.crt'),
// });
module.exports = alipaySdk

   AlipayForm ~ alipayForm文件

//参数 商品订单 商品名称 商品详细 商品价格
const AlipayForm = (orderNumber, goodsName, goodsDetail, price) => {
    return new Promise((resolve, reject) => {
        // 创建支付宝需要的表单表 对接支付宝
        const formData = new AlipayFormData();
        formData['setMethod']('get');
        // 支付成功回调地址,必须为可以直接访问的地址,不能带参数
        formData['addField']('returnUrl', 'http://localhost:9999/#/paysuccess');
        // 然后就是需要的订单参数
        formData['addField']('bizContent', {
            outTradeNo: orderNumber, // 商户订单号,64个字符以内、可包含字母、数字、下划线,且不能重复
            productCode: 'FAST_INSTANT_TRADE_PAY', // 销售产品码,与支付宝签约的产品码名称,仅支持FAST_INSTANT_TRADE_PAY
            totalAmount: `${price}`, // 订单总金额,单位为元,精确到小数点后两位
            subject: goodsName, // 订单标题
            body: goodsDetail, // 订单描述
        });

        // 业务处理
        // result 为可以跳转到支付链接的 url
        //'alipay.trade.page.pay' 统一收单下单并支付页面接口
        //{} api 请求的参数(包含“公共请求参数”和“业务参数”)
        alipaySdk.exec(
            'alipay.trade.page.pay',
            {},
            {formData: formData},
        ).then(reason => {
            resolve({
                message: '支付成功❗',
                code: 200,
                data: reason,
                ok: true
            })
        }, err => {
            resolve({
                message: '支付失败❗',
                code: 404,
                data: {},
                ok: false
            })
        })
    })
}

   AlipayFormStatus ~ alipayForm文件

//参数 订单号 交易号
const AlipayFormStatus = (out_trade_no, trade_no) => {
    return new Promise((resolve, reject) => {
        // 创建支付宝需要的表单表 对接支付宝
        const formData = new AlipayFormData();
        formData.setMethod('get');
        // 然后就是需要的订单参数
        formData.addField('bizContent', {
            out_trade_no,
            trade_no,
        });

        alipaySdk.exec(
            'alipay.trade.query',
            {},
            {formData: formData},
        ).then(result => {
            axios({
                url: result,
                method: 'get'
            }).then(reason => {
                let saveData = reason.data['alipay_trade_query_response']
                if (saveData.code === '10000') {
                    switch (saveData['trade_status']) {
                        case 'WAIT_BUYER_PAY':
                            resolve({
                                message: '通知不会返回,不能申请修改',
                                code: 199,
                                data: '支付宝有交易记录,没付款',
                                ok: true
                            })
                            break;
                        case 'TRADE_FINISHED':
                            resolve({
                                message: '交易结束,不可退款',
                                code: 200,
                                data: '交易完成',
                                ok: true
                            })
                            break;
                        case 'TRADE_SUCCESS':
                            resolve({
                                message: '高级即时到帐状态下',
                                code: 201,
                                data: '交易完成',
                                ok: true
                            })
                            break;
                        case 'TRADE_CLOSED':
                            resolve({
                                message: '默认通知不返回,可申请修改(条件需开通高级即时到帐功能,且非常需要退款的同步)。出现该情况在开通高级即时到帐时的人工操作退款时、买家没付款系统自动或卖家手动关闭了该笔交易',
                                code: 202,
                                data: '交易关闭',
                                ok: true
                            })
                            break;
                        default:
                            resolve({
                                message: '交易不存在❗',
                                code: 404,
                                data: {},
                                ok: false
                            })
                            break;
                    }
                } else {
                    resolve({
                        message: '交易不存在❗',
                        code: 404,
                        data: {},
                        ok: false
                    })
                }
            }, err => {
                resolve({
                    message: '交易不存在❗',
                    code: 404,
                    data: {},
                    ok: false
                })
            })
        }, err => {
            resolve({
                message: '交易不存在❗',
                code: 404,
                data: {},
                ok: false
            })
        })
    })
}

   AlipayForm文件 ~ 完整代码

const alipaySdk = require('./alipay.sdk')
const AlipayFormData = require('alipay-sdk/lib/form').default
const axios = require('axios')

//参数 商品订单 商品名称 商品详细 商品价格
const AlipayForm = (outTradeNo, goodsName, goodsDetail, price) => {
    return new Promise((resolve, reject) => {
        // 创建支付宝需要的表单表 对接支付宝
        const formData = new AlipayFormData();
        formData['setMethod']('get');
        // 支付成功回调地址,必须为可以直接访问的地址,不能带参数
        formData['addField']('returnUrl', 'http://127.0.0.1:3005/#/paysuccess');
        // 然后就是需要的订单参数
        formData['addField']('bizContent', {
            outTradeNo: outTradeNo, // 商户订单号,64个字符以内、可包含字母、数字、下划线,且不能重复
            productCode: 'FAST_INSTANT_TRADE_PAY', // 销售产品码,与支付宝签约的产品码名称,仅支持FAST_INSTANT_TRADE_PAY
            totalAmount: `${price}`, // 订单总金额,单位为元,精确到小数点后两位
            subject: goodsName, // 订单标题
            body: goodsDetail, // 订单描述
        });

        // 业务处理
        // result 为可以跳转到支付链接的 url
        //'alipay.trade.page.pay' 统一收单下单并支付页面接口
        //{} api 请求的参数(包含“公共请求参数”和“业务参数”)
        alipaySdk.exec(
            'alipay.trade.page.pay',
            {},
            { formData: formData },
        ).then(reason => {
            resolve({
                message: '支付成功❗',
                code: 200,
                data: reason,
                ok: true
            })
        }, err => {
            resolve({
                message: '支付失败❗',
                code: 404,
                data: {},
                ok: false
            })
        })
    })
}

//参数 订单号 交易号
const AlipayFormStatus = (out_trade_no, trade_no) => {
    return new Promise((resolve, reject) => {
        // 创建支付宝需要的表单表 对接支付宝
        const formData = new AlipayFormData();
        formData.setMethod('get');
        // 然后就是需要的订单参数
        formData.addField('bizContent', {
            out_trade_no,
            trade_no,
        });

        alipaySdk.exec(
            'alipay.trade.query',
            {},
            { formData: formData },
        ).then(result => {
            axios({
                url: result,
                method: 'get'
            }).then(reason => {
                let saveData = reason.data['alipay_trade_query_response']
                if (saveData.code === '10000') {
                    switch (saveData['trade_status']) {
                        case 'WAIT_BUYER_PAY':
                            resolve({
                                message: '通知不会返回,不能申请修改',
                                code: 199,
                                data: '支付宝有交易记录,没付款',
                                ok: true
                            })
                            break;
                        case 'TRADE_FINISHED':
                            resolve({
                                message: '交易结束,不可退款',
                                code: 200,
                                data: '交易完成',
                                ok: true
                            })
                            break;
                        case 'TRADE_SUCCESS':
                            resolve({
                                message: '高级即时到帐状态下',
                                code: 201,
                                data: '交易完成',
                                ok: true
                            })
                            break;
                        case 'TRADE_CLOSED':
                            resolve({
                                message: '默认通知不返回,可申请修改(条件需开通高级即时到帐功能,且非常需要退款的同步)。出现该情况在开通高级即时到帐时的人工操作退款时、买家没付款系统自动或卖家手动关闭了该笔交易',
                                code: 202,
                                data: '交易关闭',
                                ok: true
                            })
                            break;
                        default:
                            resolve({
                                message: '交易不存在❗',
                                code: 404,
                                data: {},
                                ok: false
                            })
                            break;
                    }
                } else {
                    resolve({
                        message: '交易不存在❗',
                        code: 404,
                        data: {},
                        ok: false
                    })
                }
            }, err => {
                resolve({
                    message: '交易不存在❗',
                    code: 404,
                    data: {},
                    ok: false
                })
            })
        }, err => {
            resolve({
                message: '交易不存在❗',
                code: 404,
                data: {},
                ok: false
            })
        })
    })
}

module.exports = {
    AlipayForm,
    AlipayFormStatus
}

使用沙箱

在这里插入图片描述

在这里插入图片描述

效果演示

请添加图片描述

AlipaySdk API ~

  • new AlipaySdk(config)
参数类型描述
ParamTypeDescription
ConfigAlipaySdkConfig初始化 SDK 配置
  • AlipaySdkConfig
参数说明类型必须
appId应用IDstring
privateKey应用私钥字符串string
signType签名种类“RSA2”|“RSA”
alipayPublicKey支付宝公钥(需要对返回值做验签时候必填)string
gateway网关string
timeout网关超时时间(单位毫秒,默认 5s)number
camelcase是否把网关返回的下划线 key 转换为驼峰写法boolean
keyType指定private key类型, 默认: PKCS1, PKCS8: PRIVATE KEY, PKCS1: RSA PRIVATE KEY“PKCS1”|“PKCS8”
appCertPath应用公钥证书文件路径string
appCertContent应用公钥证书文件内容string|Buffer
appCertSn应用公钥证书snstring
alipayRootCertPath支付宝根证书文件路径string
alipayRootCertContent支付宝根证书文件内容string|Buffer
alipayRootCertSn支付宝根证书snstring 否
alipayPublicCertPath支付宝公钥证书文件路径string
alipayPublicCertContent支付宝公钥证书文件内容string|Buffer
alipayCertSn支付宝公钥证书sn string
encryptKeyAES密钥,调用AES加解密相关接口时需要string
wsServiceUrl服务器地址string
  • AlipaySdk.sdkExec(method, params) ⇒ string

作用 : 生成请求字符串,用于客户端进行调用 ~ Returns: string - 请求字符串

ParamTypeDescription
methodstring方法名
paramsIRequestParams请求参数
params.bizContentobject业务请求参数
  • AlipaySdk.pageExec(method, params) ⇒ string

作用 :生成网站接口请求链接或表单 ~ Returns: string - 请求链接或表单 HTML

ParamTypeDescription
methodstring方法名
paramsIRequestParams请求参数
params.bizContentobject业务请求参数
params.methodstring后续进行请求的方法。如为 GET,即返回 http 链接;如为 POST,则生成表单 html
  • AlipaySdk.exec(method, params, option) ⇒ Promise.<(AlipaySdkCommonResult|string)>

作用 :执行请求,调用支付宝服务端

Returns: Promise.<(AlipaySdkCommonResult|string)> - 请求执行结果

ParamTypeDescription
methodstring调用接口方法名,比如 alipay.ebpp.bill.add
paramsIRequestParams请求参数
params.bizContentobject业务请求参数
optionIRequestOption选项
option.validateSignBoolean是否验签
args.logobject可选日志记录对象
  • AlipaySdkCommonResult

作用 : 响应结果

参数说明类型必须
code响应码。10000 表示成功,其余详见 https://opendocs.alipay.com/common/02km9fstring
msg响应讯息。Success 表示成功。string
sub_code错误代号string
sub_msg错误辅助信息string
  • IRequestParams

作用 :请求参数

参数说明类型必须
bizContent业务请求参数object
needEncrypt自动AES加解密boolean
  • AlipaySdk.checkNotifySign(postData, raw)

作用 :通知验签 ~ Returns: Boolean - 是否验签成功

ParamTypeDescription
postDataJSON服务端的消息内容
rawBoolean是否使用 raw 内容而非 decode 内容验签

最后

以上是个人学习Node的相关知识点,一点一滴的记录了下来,有问题请评论区指正,共同进步,这才是我写文章的原因之,如果这篇文章对您有帮助请三连支持一波

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

长城汽车Hi4技术品牌成果初现,大象转身必将势不可挡

今年1-6月&#xff0c;长城汽车销售52万辆&#xff0c;新能源车型销售9.3万辆&#xff0c;同比增长47%&#xff1b;智能新能源新产品密集上市&#xff0c;新能源销量与占比逐月攀升&#xff0c;6月销售超2.6万辆&#xff0c;占比突破25%&#xff0c;皆创历史新高&#xff1b; 全…

智慧数据驱动:基于smardaten构建多维数据可视化大屏

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

【uni-app】常用图标、头像汇总

在做小程序的时候&#xff0c;有时候需要各种图标和头像素材&#xff0c;而百度一堆基本都是收费的。所以&#xff0c;整理一些免费好用的图标&#xff0c;头像库&#xff1a; 1、iconfont-阿里巴巴矢量图标库 基本上常用的矢量图标&#xff0c;在这儿都有&#xff0c;而且可…

【极简 亲测】已拦截跨源请求:同源策略禁止读取位于....的远程资源。(原因:CORS 头缺少 ‘Access-Control-Allow-Origin‘)

CORS是Cross-Origin Resource Sharing。 解决 首先这个是浏览器层面的拦截。下面的方法都是解除浏览器拦截的方式。 解除了之后还是有可能其他方面有问题的&#xff0c;但是那个会提示其他错误。 比如CORs Failed之类的&#xff0c;这个是没收到response&#xff0c;大概率是…

【go】xorm分类统计及多表联查

文章目录 1 分类统计2 多表联查 1 分类统计 1 sql SELECT grade_protection_level AS type, count(grade_protection_level) AS count FROM vital_7jvebmrryff3_asset WHERE (field_group 应用信息)AND (asset_life_cycle 正式)AND (status 1) GROUP BY grade_protection…

微服务系列文章 之SpringBoot之定时任务详解

序言 使用SpringBoot创建定时任务非常简单&#xff0c;目前主要有以下三种创建方式&#xff1a; 一、基于注解(Scheduled)二、基于接口&#xff08;SchedulingConfigurer&#xff09; 前者相信大家都很熟悉&#xff0c;但是实际使用中我们往往想从数据库中读取指定时间来动态…

实现 Rollup 插件alias 并使用vitest提高开发效率

本篇文章是对 实现 Rollup 插件 alias | 使用 TypeScript 实现库的基本流程 | 使用单元测试提高开发效率 的总结。其中涉及到开发一个组件库的诸多知识点。 实现一个经常用的 rollup 插件 alias 首先执行npm init命令初始化一个package.json文件&#xff0c;因为插件使用了ty…

【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

文章目录 Cortex-M 系列介绍Cortex-M0/M0 介绍Cortex-M3/M4 介绍Cortex-M7 介绍Cotex-M33 介绍 下篇文章&#xff1a;ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M 系列介绍 Cortex-M0/M0 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器&#xff08;MCU&#xff0…

AIGC之文本内容生成概述(下)——Transformer

在上一篇文章中&#xff0c;我们一口气介绍了LSTM、Word2Vec、GloVe、ELMo等四种模型的技术发展&#xff0c;以及每种模型的优缺点与应用场景&#xff0c;全文超过一万字&#xff0c;显得冗长且繁杂&#xff0c;在下文部分我们将分开介绍Transformer、BERT、GPT1/GPT2/GPT3/Cha…

职责链模式:如何实现可灵活扩展算法的敏感信息过滤框架?

今天&#xff0c;我们主要讲解职责链模式的原理和实现。除此之外&#xff0c;我还会利用职责链模式&#xff0c;带你实现一个可以灵活扩展算法的敏感词过滤框架。下一节课&#xff0c;我们会更加贴近实战&#xff0c;通过剖析Servlet Filter、Spring Interceptor来看&#xff0…

K12351 生日日期

题解目录 K12351 生日日期题目描述输入格式输出格式解题思路解题思路2&#xff08;未编写&#xff09;示例代码 其他题解&#xff1a;思维拓展题目描述正确答案 K12351 生日日期 题目描述 小科的生日是YY年MM月DD日&#xff0c;他想知道自己出生第10000天纪念的日期&#xff…

如何在PADS Logic中查找器件

PADS Logic提供类似于Windows的查找功能&#xff0c;可以进行器件的查找。 &#xff08;1&#xff09;在Logic设计界面中&#xff0c;将菜单显示中的“选择工具栏”进行打开&#xff0c;如图1所示&#xff0c;会弹出对应的“选择工具栏”的分栏菜单选项&#xff0c;如图2所示。…

一文带你了解Spring中存入Bean和获取Bean的方式

0. Spring中的五大注解 上图中就是五大类注解对应的层&#xff0c;通过源码可以看到其他四个注解都基于Conponent 1. 存入 Bean Spring既然是一个包含众多工具方法的IoC容器&#xff0c;它是一个控制反转的容器&#xff0c;所以就需要将Bean对象存入到容器中&#xff0c;需要…

Vue中值的传递(父传子,子传父,子父同步)

1.父组件->子组件传递数据 ①父组件通过 v-bind: 属性绑定的形式&#xff0c;把数据传递给子组件 如果不需要动态绑定&#xff0c;则可以直接写number“张三” ②子组件中&#xff0c;通过props接收父组件传递过来的数据 2.子组件->父组件传递数据 1.在子组件中&#xf…

举例说明基于线性回归的单层神经网络网络(以梯度下降算法来求解权重的过程)...

我们将通过一个简单的例子来说明基于线性回归的单层神经网络&#xff0c;以及如何使用梯度下降算法来求解权重。 假设我们有以下数据集&#xff0c;表示学生的学习时间&#xff08;小时&#xff09;与他们的考试分数&#xff1a; 学习时间&#xff08;X&#xff09;&#xff1a…

使用NVIDIA FX Composer验证多纹理合成效果

最近项目上有一个需求&#xff0c;需要将4张带透明通道纹理合成为一张&#xff0c;并且每张纹理指定一个全局透明度。由于纹理过多&#xff0c;合成效果无法保证&#xff0c;为了减少项目的风险&#xff0c;领导希望我先快速验证一下我们讨论的方法是否能完成项目的要求。因此我…

Mybatis-Plus(二)--Mybatis-Plus方法大全

通用CRUD大全&#xff08;Mybatis-Plus为我们提供了哪些操作&#xff09; 还有在mybatis中遇到列名和属性名不一致等等的情况&#xff0c;在mybatis中xml中声明解决&#xff0c;在mybatis-plus中也都有对应的解决。 1.插入操作 //插入一条记录 //参数entity是实体对象 int ins…

基于单片机的智能点滴速度输液液体检测

目 录 摘 要...................................................................................................................... I ABSTRACT.......................................................................................................... II 第…

【机器学习】吴恩达课程1-Introduction

一、机器学习 1. 定义 计算机程序从经验E中学习&#xff0c;解决某一任务T&#xff0c;进行某一性能P&#xff0c;通过P测定在T上的表现因经验E而提高。 2. 例子 跳棋程序 E&#xff1a;程序自身下的上万盘棋局 T&#xff1a;下跳棋 P&#xff1a;与新对手下跳棋时赢的概…

离线数据仓库

一、数据仓库 1.数据仓库的概念 1)数据仓库的特点: 面向主题的:对数据进行整合、分析和归类的抽象集成的:将不同数据源的数据(业务数据、外部系统数据、埋点日志)经过统一编码、规范命名、字段类型转换等操作,整合到仓库相对稳定的:根据业务场景实时更新、一般会被长…