112 lines
3.3 KiB
JavaScript
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");
|