活动:支付宝支付

This commit is contained in:
qiaoxin
2021-05-12 19:20:11 +08:00
parent 2fc5017af8
commit 49d582ef06
7 changed files with 178 additions and 100 deletions
@@ -7,6 +7,7 @@ import { dicRMB } from '../../../pubUtils/dictionary/DicRMB';
import { UserOrderModel } from '../../../db/UserOrder';
import _ = require('underscore');
import { applyOrderWX, checkOrderWX } from '../../../services/pay/weixinPay';
import { applyOrderALI, checkOrderALI } from '../../../services/pay/aliPay';
export default function (app: Application) {
return new orderHandler(app);
@@ -50,7 +51,6 @@ export class orderHandler {
switch (payType) {
case PAY_TYPE.WX:
{
//生成订单号
let weixinOrder = await applyOrderWX(localOrderID, price * 100, message);
if (weixinOrder.code == 0) {
console.log('微信下单失败')
@@ -62,6 +62,14 @@ export class orderHandler {
}
case PAY_TYPE.ALI:
{
let aliOrder = await applyOrderALI(localOrderID, price, message);
if (aliOrder.code == 0) {
console.log('支付宝下单失败')
return resResult(STATUS.APPLY_ORDER_ERROR);
}
sdkOrderInfo = aliOrder.data;
orderID = aliOrder.data;//支付宝订单
break;
}
@@ -153,6 +161,20 @@ export class orderHandler {
}
case PAY_TYPE.ALI:
{
let aliResult = await checkOrderALI(localOrderID);
if (aliResult.code == 0) {
console.log('支付宝订单查询失败')
return resResult(STATUS.ORDER_ERROR);
}
if (parseInt(aliResult.data.total_amount) != price) {
console.log('订单价格错误')
return resResult(STATUS.PRICE_ERROR);
}
if (aliResult.data.trade_status != "TRADE_SUCCESS") {
return resResult(STATUS.NO_PAY);
}
let aliOrderID = aliResult.data.trade_no;
await UserOrderModel.saveOrderID(roleId, localOrderID, aliOrderID);
break;
}
@@ -166,20 +188,13 @@ export class orderHandler {
}
//订单成功
let isSuccess = true;
if (isSuccess) {
orderInfo = await UserOrderModel.success(roleId, localOrderID);
if (orderInfo) {
//结算奖励
console.log('结算完成', localOrderID)
return resResult(STATUS.SUCCESS, Object.assign({}));
}
} else {
let message = '订单校验失败';
orderInfo = await UserOrderModel.fail(roleId, localOrderID, message);
orderInfo = await UserOrderModel.success(roleId, localOrderID);
if (orderInfo) {
//结算奖励
console.log('结算完成', localOrderID)
return resResult(STATUS.SUCCESS, Object.assign({}));
}
return resResult(STATUS.DUPLICATE_ORDER);
}
+93
View File
@@ -0,0 +1,93 @@
import path = require('path');
import fs = require('fs');
const Alipay = require('alipay-mobile').default
/*
包名:com.bantu.sgzzyz
APPID:2021002142639438
*/
//notify_url: 异步通知url
//app_id: 开放平台 appid
//appPrivKeyFile: 你的应用私钥
//alipayPubKeyFile: 蚂蚁金服公钥
const config = {
app_id: '2021002142639438',
appPrivKeyFile: fs.readFileSync(path.resolve(__dirname, '../../../../../key/alipay/rsa_private_key.pem')),
alipayPubKeyFile: fs.readFileSync(path.resolve(__dirname, '../../../../../key/alipay/rsa_public_key.pem'))
}
const service = new Alipay(config)
/**
* 支付宝下单
*
* @param {number} price 订单总金额,单位为元,精确到小数点后两位
* @param {string} message 商品信息
* @param {string} localOrderID 本地订单号
*
*/
export async function applyOrderALI(localOrderID: string, price: number, message: string) {
const data = {
subject: message,
out_trade_no: localOrderID,
total_amount: price.toFixed(2).toString()
}
console.log('applyOrderALI :', data)
let result = await service.createOrder(data)
// { code: 0,
// message: '请求成功',
// data:
// 'app_id=2021002142639438&biz_content=%7B%22subject%22%3A%22%E8%B5%B5%E4%BA%91%E4%BC%A0%E8%B4%AD%E4%B9%B0%E5%85%83%E5%AE%9D60%22%2C%22out_trade_no%22%3A%22bwnNLGfdCylflxKf54bEpcwyEbq7xygp%22%2C%22total_amount%22%3A%226.00%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%7D&charset=utf-8&method=alipay.trade.app.pay&sign_type=RSA2&timestamp=2021-05-12%2018%3A40%3A25&version=1.0&sign=S4U6JzSUiCSMvAbXeiJ2m2AQ%2BfCSr4VE4VNN9QEZtplgWIO51HIGhL24BpR4aj7mMfWO%2BqaWQnU0Fe8Uki960smBdj0%2FDpuztA7%2BIBWHK1Qj69%2FLhDNLoHZgO41jQJjIOVI0gWt1KaDlG2%2B52ghswqcZN%2FkFLwfMZCMEph3eg3aofq1mmwRbqAh8Sepoy9nCd24CmMUIbNe%2FmcxVg3xvYcWXnneWWHu%2FFbnaeZtynoHVhXqqhjFZSrxdk8lo5qyTXkE1ZoUrhJz918E2rArwzZeUL09ncPshHHvX6AygXp5BtV4clwTY0OY5yzOEXboluR5YmSaVXn0VkTWJZCTWTQ%3D%3D'
// }
console.log('applyOrderALI result: ', result)
if (result.code == 0) {
return { code: 1, data: result.data };
}
return { code: 0, data: JSON.stringify(result) };
}
/**
* 支付宝查询支付结果
*
* @param {number} serverId 区Id
* @param {string} roleId 角色Id
* @param {string} localOrderID 本地订单号
*
*/
export async function checkOrderALI(localOrderID: string) {
let data = {
out_trade_no: localOrderID,
}
console.log('checkOrderALI :', data)
let result = await service.queryOrder(data)
console.log('checkOrderALI result: ', result)
// {
// 0|app | code: '0',
// 0|app | data: {
// 0|app | code: '10000',
// 0|app | msg: 'Success',
// 0|app | buyer_logon_id: '525***@qq.com',
// 0|app | buyer_pay_amount: '0.00',
// 0|app | buyer_user_id: '2088302819007765',
// 0|app | invoice_amount: '0.00',
// 0|app | out_trade_no: 'JbyWyR1SIVIw9ArxvHAgte6tmnIzSRea',
// 0|app | point_amount: '0.00',
// 0|app | receipt_amount: '0.00',
// 0|app | send_pay_date: '2019-09-29 18:32:13',
// 0|app | total_amount: '1.00',
// 0|app | trade_no: '2019092922001407760553648380',
// 0|app | trade_status: 'TRADE_SUCCESS'
// 0|app | },
// 0|app | message: 'success'
// 0|app | }
if ((result.code == '0') && (result.message == "success")) {
return { code: 1, data: result.data };
}
return { code: 0, data: JSON.stringify(result) };
}