2025-04-03 21:28:51 +08:00

112 lines
3.3 KiB
JavaScript

// src/app.ts
import { App } from "@kevisual/router";
import { useContextKey } from "@kevisual/use-config/context";
var app = useContextKey("app", () => new App());
// src/routes/pay/alipay/init.ts
import { AlipaySdk } from "alipay-sdk";
// src/modules/pay-alipay-config.ts
import dotenv from "dotenv";
import path from "path";
var configPath = process.env.NODE_ENV === "development" ? ".env.alipay" : ".env.alipay";
var env = dotenv.config({
path: path.resolve(process.cwd(), configPath)
}).parsed;
var appId = env.ALIPAY_APP_ID;
var privateKey = env.ALIPAY_PRIVATE_KEY;
var appPublicCert = env.ALIPAY_APP_PUBLIC_CERT;
var alipayRootCert = env.ALIPAY_ROOT_CERT;
var alipayPublicCert = env.ALIPAY_PUBLIC_CERT;
var payAlipayConfig = {
appId,
privateKey,
appPublicCert,
alipayRootCert,
alipayPublicCert
};
// src/routes/pay/alipay/init.ts
var initSdk = () => {
const privateKey2 = payAlipayConfig.privateKey;
const appPublicCert2 = payAlipayConfig.appPublicCert;
const appId2 = payAlipayConfig.appId;
const pay_dev = false;
console.log("payConfig", pay_dev);
const devConfig = {
gateway: "https://openapi-sandbox.dl.alipaydev.com/gateway.do"
};
console.log("payConfig", appId2);
const alipaySdk = new AlipaySdk({
// // 设置应用 ID
appId: appId2,
// // 设置应用私钥
privateKey: privateKey2,
// // 应用公钥证书
appCertContent: appPublicCert2,
// appCertPath: certPath.appPublicCertPath,
// // 支付宝根证书
alipayRootCertContent: payAlipayConfig.alipayRootCert,
// // 支付宝公钥证书
alipayPublicCertContent: payAlipayConfig.alipayPublicCert,
// // 密钥类型,请与生成的密钥格式保持一致,参考平台配置一节
// // keyType: 'PKCS1',
keyType: "PKCS1",
// // 设置网关地址,默认是 https://openapi.alipay.com
// // endpoint: 'https://openapi.alipay.com',
// // endpoint: pay_dev ? devConfig.endpoint : 'https://openapi.alipay.com',
// gateway: "https://openapi-sandbox.dl.alipaydev.com/gateway.do",
...pay_dev ? devConfig : {}
});
return alipaySdk;
};
// src/routes/pay/alipay/pay.ts
var pay = async (opts) => {
const alipaySdk = initSdk();
const money = opts?.money ? (opts.money / 100).toFixed(2) : 0.01;
const result = alipaySdk.pageExec("alipay.trade.page.pay", "GET", {
bizContent: {
out_trade_no: opts.out_trade_no,
total_amount: money,
subject: opts.subject,
product_code: "FAST_INSTANT_TRADE_PAY"
},
notify_url: "https://kevisual.cn/api/s1/pay/notify/alipay",
return_url: "https://kevisual.cn/"
});
return {
form: result,
content: {
out_trade_no: opts.out_trade_no,
total_amount: money,
subject: opts.subject
}
};
};
var genOutTradeNo = () => {
return (/* @__PURE__ */ new Date()).getTime().toString();
};
// src/routes/pay/pay.ts
app.route({
path: "alipay",
key: "pay"
// middleware: ['auth']
}).define(async (ctx) => {
const { money, subject, out_trade_no } = ctx.query.data || {};
if (!money || !subject) {
ctx.throw(400, "money or subject is required");
}
if (isNaN(Number(money))) {
ctx.throw(400, "money must be a number");
}
const result = await pay({
out_trade_no: out_trade_no || genOutTradeNo(),
money,
subject
});
ctx.body = result;
}).addTo(app);
console.log("pay alipay\u52A0\u8F7D\u6210\u529F");