flexbiz-server
Version:
Flexible Server
18 lines (17 loc) • 7.52 kB
JavaScript
'use strict';const controller=require("../controllers/controller"),Ptthanhtoan=global.getModel("ptthanhtoan"),hmacSHA256=require("crypto-js/hmac-sha256"),axios=require("axios"),moment=require("moment"),momoScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024},ma_ct:{type:String,required:!0,uppercase:!0},pt_thanh_toan:{type:String,required:!0},client_ip:{type:String,required:!0},trang_thai:{type:String,default:"0",enum:["0","1","2"]}});
(global.configs||{}).createIndexes&&(momoScheam.index({id_app:1}),momoScheam.index({id_ct:1}),momoScheam.index({trang_thai:1}),momoScheam.index({pt_thanh_toan:1}));const model=mongoose.models.momo||mongoose.model("momo",momoScheam),again_link=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/payment/again`;
model.getInfo=async($id_app$$,$condition$$,$fields$$)=>{$condition$$.id_app=$id_app$$;return new Promise(($resolve$$,$reject$$)=>{model.findOne($condition$$).lean().exec(($e$$,$rs$$)=>{if($e$$||!$rs$$)return $reject$$(Error($e$$?$e$$.message:`Can't find transaction info, Query: ${JSON.stringify($condition$$)}`));$resolve$$($fields$$?$rs$$[$fields$$]:$rs$$)})})};
model.getConfigs=async($id_app$$,$pt_thanh_toan$$,$_paymentViamomo$$)=>{if(!$pt_thanh_toan$$||!global.mongoose.Types.ObjectId.isValid($pt_thanh_toan$$))return null;$_paymentViamomo$$||($_paymentViamomo$$=await Ptthanhtoan.getInfo($id_app$$,{_id:$pt_thanh_toan$$}));return $_paymentViamomo$$||"momo"===$_paymentViamomo$$.payment_service?($id_app$$=$_paymentViamomo$$.momo_configs)&&$id_app$$.endpoint&&($id_app$$.partnerCode||$id_app$$.partnercode)&&($id_app$$.accessKey||$id_app$$.accesskey)&&$id_app$$.serectkey?
($id_app$$.partnerCode=$id_app$$.partnerCode||$id_app$$.partnercode,$id_app$$.accessKey=$id_app$$.accessKey||$id_app$$.accesskey,$id_app$$):null:(console.log("Phuong thuc thanh toan khong ton tai"),null)};
model.createVirtualPaymentClientURL=async($order$$,$client_ip$$,$_paymentViamomo$$)=>{let $id_app$$=$order$$.id_app,$amount$$=$order$$.amount||$order$$.t_tien||0;if(1E3>$amount$$)throw"S\u1ed1 ti\u1ec1n ph\u1ea3i l\u1edbn h\u01a1n ho\u1eb7c b\u1eb1ng 1000 VND";let $momo_configs$$=await model.getConfigs($id_app$$,$order$$.pt_thanh_toan,$_paymentViamomo$$);if(!$momo_configs$$)return console.log("not found momo configs"),"";let $_momo$$=new model({id_app:$id_app$$,id_ct:$order$$._id,ma_ct:$order$$.ma_ct,
pt_thanh_toan:$order$$.pt_thanh_toan,client_ip:$client_ip$$||":11"});return new Promise(($resolve$$,$reject$$)=>{$_momo$$.save(($e$$,$requestId_rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));$e$$=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/${$id_app$$}/momo/${$requestId_rs$$._id.toString()}/callback`;let $ipnUrl$$=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/${$id_app$$}/momo/notify`,$orderId$$=$order$$._id.toString();$requestId_rs$$=$requestId_rs$$._id.toString();
let $orderInfo$$=$order$$.dien_giai||"pay with MoMo",$signature$$=hmacSHA256(`accessKey=${$momo_configs$$.accessKey}&amount=${$amount$$}&extraData=${"merchantName=;merchantId="}&ipnUrl=${$ipnUrl$$}&orderId=${$orderId$$}&orderInfo=${$orderInfo$$}&partnerCode=${$momo_configs$$.partnerCode}&redirectUrl=${$e$$}&requestId=${$requestId_rs$$}&requestType=${"captureWallet"}`,$momo_configs$$.serectkey).toString();axios.post($momo_configs$$.endpoint,{partnerCode:$momo_configs$$.partnerCode,accessKey:$momo_configs$$.accessKey,
requestId:$requestId_rs$$,amount:$amount$$.toString(),orderId:$orderId$$,orderInfo:$orderInfo$$,redirectUrl:$e$$,extraData:"merchantName=;merchantId=",requestType:"captureWallet",ipnUrl:$ipnUrl$$,signature:$signature$$}).then($res$$=>{if($res$$.data.resultCode)return $reject$$(Error($res$$.data.localMessage));$resolve$$($res$$.data.payUrl)}).catch($response$$=>{if($response$$.data&&$response$$.data.resultCode)return $reject$$(Error($response$$.data.localMessage));$reject$$($response$$)})})})};
model.handleNotify=async($id_app$$,$body_receiver$$,$callback$$)=>{let $id_transaction$$=$body_receiver$$.requestId;try{const $trans$$=await model.findOne({_id:$id_transaction$$}),$service_configs$$=await model.getConfigs($id_app$$,$trans$$.pt_thanh_toan);let $resultCode$$=$body_receiver$$.resultCode,$message$$=$body_receiver$$.localMessage,$responseTime$$=moment().format("YYYY-MM-DD HH:mm:ss"),$body_return$$={partnerCode:$body_receiver$$.partnerCode,accessKey:$body_receiver$$.accessKey,requestId:$body_receiver$$.requestId,
orderId:$body_receiver$$.orderId,resultCode:$resultCode$$,message:$message$$,responseTime:$responseTime$$,extraData:"",signature:hmacSHA256(`partnerCode=${$body_receiver$$.partnerCode}&accessKey=${$body_receiver$$.accessKey}&requestId=${$body_receiver$$.requestId}&orderId=${$body_receiver$$.orderId}&resultCode=${$resultCode$$}&message=${$message$$}&responseTime=${$responseTime$$}&extraData=${""}`,$service_configs$$.serectkey).toString()};$callback$$(null,$body_return$$)}catch($e$$){console.error($e$$),
$callback$$($e$$.message)}};
model.verifyReturnUrl=async($id_app$jscomp$4_orderId$$,$id_transaction$$)=>{let $_momo$$=await model.getInfo($id_app$jscomp$4_orderId$$,{_id:$id_transaction$$}),$momo_configs$$=await model.getConfigs($id_app$jscomp$4_orderId$$,$_momo$$.pt_thanh_toan);if(!$momo_configs$$)throw"Miss configures for momo";$id_app$jscomp$4_orderId$$=$_momo$$.id_ct;let $requestId$$=$_momo$$._id.toString(),$signature$$=hmacSHA256(`accessKey=${$momo_configs$$.accessKey}&orderId=${$id_app$jscomp$4_orderId$$}&partnerCode=${$momo_configs$$.partnerCode}&requestId=${$requestId$$}`,$momo_configs$$.serectkey).toString(),
$body$$={partnerCode:$momo_configs$$.partnerCode,accessKey:$momo_configs$$.accessKey,requestId:$requestId$$,orderId:$id_app$jscomp$4_orderId$$,lang:"vi",signature:$signature$$};return new Promise(($resolve$$,$reject$$)=>{axios.post($momo_configs$$.endpoint_query||$momo_configs$$.endpoint,$body$$).then(async $response$$=>{$response$$=$response$$.data;$response$$.isSuccess=0==$response$$.resultCode;var $_v_obj_updated$$=global.getModel(`${$_momo$$.ma_ct.toLowerCase()}`);if($response$$.isSuccess){model.findOneAndUpdate({_id:$id_transaction$$},
{trang_thai:0==$response$$.isSuccess?"1":"2"});try{await $_v_obj_updated$$.findOneAndUpdate({_id:$_momo$$.id_ct},{trang_thai:"5"});const $obj_updated$$=await $_v_obj_updated$$.findOne({_id:$_momo$$.id_ct});let $ctrl$$=global.controllers[$_momo$$.ma_ct.toUpperCase()];if($ctrl$$&&$obj_updated$$){$ctrl$$.post&&controller.postData($obj_updated$$,$ctrl$$,async()=>{controller.pushNotification($ctrl$$,$obj_updated$$,"update")});if($ctrl$$.handleAfterPayment)try{await $ctrl$$.handleAfterPayment($obj_updated$$),
controller.pushNotification($ctrl$$,$obj_updated$$,"payment",null,!1,{title:`Bill ${$obj_updated$$.so_ct} \u0111\u00e3 \u0111\u01b0\u1ee3c thanh to\u00e1n`})}catch($e$$){console.log("error handle after payment",$e$$)}$response$$.result_url=$obj_updated$$.again_link||again_link}}catch($e$$){console.log("error update status for voucher",$_momo$$.ma_ct,$e$$)}}else $_v_obj_updated$$=await $_v_obj_updated$$.findOne({_id:$_momo$$.id_ct}),$response$$.result_url=$_v_obj_updated$$.again_link||again_link;$response$$.result_url=
$response$$.result_url||again_link;$response$$.error_url="";$response$$.message=$response$$.localMessage;$resolve$$($response$$)}).catch($response$$=>{if($response$$.data&&$response$$.data.resultCode)return $reject$$(Error($response$$.data.localMessage));$reject$$($response$$)})})};module.exports=model;