flexbiz-server
Version:
Flexible Server
25 lines (24 loc) • 11 kB
JavaScript
const {OnePayDomestic}=require("vn-payments"),{OnePayInternational}=require("vn-payments"),{pack,toUpperCase,hashHmac}=require("vn-payments/dist/utils"),axios=require("axios"),controller=require("../controllers/controller"),{executeInTransaction}=require("../libs/sessionContext"),App=global.getModel("app"),Customer=global.getModel("customer"),Ptthanhtoan=global.getModel("ptthanhtoan"),onepayScheam=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},vpc_OrderInfo:{type:String,required:!0},vpc_Amount:{type:Number,required:!0},vpc_Version:{type:Number,required:!0,default:2},vpc_Command:{type:String,required:!0,default:"pay"},vpc_Locale:{type:String,required:!0,default:"vn"},vpc_TicketNo:{type:String,required:!0},trang_thai:{type:String,default:"0",enum:["0","1","2"]}});
(global.configs||{}).createIndexes&&(onepayScheam.index({id_app:1}),onepayScheam.index({id_ct:1}),onepayScheam.index({ma_ct:1}),onepayScheam.index({pt_thanh_toan:1}),onepayScheam.index({trang_thai:1}));const model=mongoose.models.onepay||mongoose.model("onepay",onepayScheam),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().then($rs$$=>{if(!$rs$$)return $reject$$(Error(`Can't find transaction info, Query: ${JSON.stringify($condition$$)}`));$resolve$$($fields$$?$rs$$[$fields$$]:$rs$$)}).catch($e$$=>{$reject$$($e$$)})})};
model.getConfigs=async($id_app$$,$pt_thanh_toan$$,$_paymentViaOnePay$$)=>{if(!$pt_thanh_toan$$||!global.mongoose.Types.ObjectId.isValid($pt_thanh_toan$$))return null;$_paymentViaOnePay$$||=await Ptthanhtoan.getInfo($id_app$$,{payment_service:"onepay",_id:$pt_thanh_toan$$});return $_paymentViaOnePay$$&&$_paymentViaOnePay$$.payment_service==="onepay"?($id_app$$=$_paymentViaOnePay$$.onepay_configs)&&$id_app$$.vpc_url_payment&&($id_app$$.vpc_Merchant||$id_app$$.vpc_merchant)&&($id_app$$.vpc_AccessCode||
$id_app$$.vpc_accessCode)&&($id_app$$.SECURE_SECRET||$id_app$$.secure_secret)?($id_app$$.vpc_Merchant=$id_app$$.vpc_merchan||$id_app$$.vpc_Merchantt,$id_app$$.vpc_AccessCode=$id_app$$.vpc_accesscode||$id_app$$.vpc_accessCode||$id_app$$.vpc_AccessCode,$id_app$$.SECURE_SECRET=$id_app$$.secure_secret,$id_app$$):null:null};
model.createVirtualPaymentClientURL=async($order$$,$client_ip$$,$_cust__paymentViaOnePay$$)=>{let $id_app$$=$order$$.id_app,$onepay_configs$$=await model.getConfigs($id_app$$,$order$$.pt_thanh_toan,$_cust__paymentViaOnePay$$);if(!$onepay_configs$$)return Logger.error("not found onepay configs"),"";let $virtualPaymentClientURL$$=$onepay_configs$$.vpc_url_payment,$_app$$=await App.getInfo($id_app$$);$_cust__paymentViaOnePay$$=await Customer.findOne({id_app:$id_app$$,ma_kh:$order$$.ma_kh}).lean()||{};
let $_onepay$$=new model({id_app:$id_app$$,id_ct:$order$$._id,ma_ct:$order$$.ma_ct,pt_thanh_toan:$order$$.pt_thanh_toan,vpc_OrderInfo:`${$_app$$.short_name||""}_${$_cust__paymentViaOnePay$$.dien_thoai||$order$$.user_created}`.substring(0,32),vpc_Amount:$order$$.amount||$order$$.t_tien,vpc_Locale:$order$$.payment_getway_lang||($order$$.ma_nt=="VND"?"vn":"en"),vpc_TicketNo:$client_ip$$||":11"});return new Promise(($resolve$$,$reject$$)=>{$_onepay$$.save(($e$$,$rs$$)=>{if($e$$)return $reject$$(Error($e$$.message));
$e$$=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/${$id_app$$}/onepay/${$rs$$._id.toString()}/callback`;let $onepayIntl$$;$onepayIntl$$=$onepay_configs$$.domestic?new OnePayDomestic({paymentGateway:$virtualPaymentClientURL$$,merchant:$onepay_configs$$.vpc_Merchant,accessCode:$onepay_configs$$.vpc_AccessCode,secureSecret:$onepay_configs$$.SECURE_SECRET}):new OnePayInternational({paymentGateway:$virtualPaymentClientURL$$,merchant:$onepay_configs$$.vpc_Merchant,accessCode:$onepay_configs$$.vpc_AccessCode,
secureSecret:$onepay_configs$$.SECURE_SECRET});let $data$$={amount:$order$$.amount||$order$$.t_tien,customerId:$order$$.ma_kh};$data$$.billingCity=$order$$.quan_huyen;$data$$.billingCountry=$order$$.quoc_gia;$data$$.billingPostCode=$order$$.post_code;$data$$.billingStateProvince=$order$$.tinh_thanh;$data$$.billingStreet=$order$$.dia_chi;$data$$.againLink=again_link;$data$$.title=$_app$$.name;$data$$.vpcCommand="pay";$data$$.customerId=$order$$.ma_kh;$data$$.customerPhone=$order$$.dien_thoai;$data$$.locale=
$rs$$.vpc_Locale;$data$$.transactionId=$rs$$._id.toString();$data$$.orderId=$rs$$.vpc_OrderInfo;$data$$.returnUrl=$e$$;$data$$.clientIp=$rs$$.vpc_TicketNo;$onepayIntl$$.buildCheckoutUrl($data$$).then($checkoutUrl$$=>{$resolve$$($checkoutUrl$$.href);$onepay_configs$$.vpc_querydr_url&&setTimeout(async()=>{try{let $rs$$=await model.queryTransaction($id_app$$,$order$$._id);$rs$$.vpc_DRExists=="Y"&&$rs$$.vpc_TxnResponseCode!="0"&&setTimeout(async()=>{try{let $rs$$=await model.queryTransaction($id_app$$,
$order$$._id);$rs$$.vpc_DRExists=="Y"&&$rs$$.vpc_TxnResponseCode!="0"&&setTimeout(async()=>{try{await model.queryTransaction($id_app$$,$order$$._id)}catch($e$$){Logger.error($e$$)}},122E4)}catch($e$$){Logger.error($e$$)}},122E4)}catch($e$$){Logger.error($e$$)}},12E5)}).catch($err$$=>{$reject$$(Error($err$$))})})})};
function parseQuery($pairs_queryString$$){var $query$$={};$pairs_queryString$$=($pairs_queryString$$[0]==="?"?$pairs_queryString$$.substring(0,1):$pairs_queryString$$).split("&");for(var $i$$=0;$i$$<$pairs_queryString$$.length;$i$$++){var $pair$$=$pairs_queryString$$[$i$$].split("=");$query$$[decodeURIComponent($pair$$[0])]=decodeURIComponent($pair$$[1]||"")}return $query$$}
model.queryTransaction=async($id_app$jscomp$3_onepay_configs$$,$id_ct_query$$)=>{let $onepay_transaction$$=await model.getInfo($id_app$jscomp$3_onepay_configs$$,{id_ct:$id_ct_query$$});if(!$onepay_transaction$$)throw"Giao d\u1ecbch kh\u00f4ng t\u1ed3n t\u1ea1i";$id_app$jscomp$3_onepay_configs$$=await model.getConfigs($id_app$jscomp$3_onepay_configs$$,$onepay_transaction$$.pt_thanh_toan);if(!$id_app$jscomp$3_onepay_configs$$)throw"not found onepay configs";if(!$id_app$jscomp$3_onepay_configs$$.vpc_querydr_url||
!$id_app$jscomp$3_onepay_configs$$.vpc_User||!$id_app$jscomp$3_onepay_configs$$.vpc_Password)throw"Ch\u01b0a khai b\u00e1o queryDR api cho ph\u01b0\u01a1ng th\u1ee9c thanh to\u00e1n qua onepay";let $_v$$=global.getModel(`${$onepay_transaction$$.ma_ct.toLowerCase()}`);const $obj_updated$$=await $_v$$.findOne({_id:$onepay_transaction$$.id_ct});if(!$obj_updated$$)throw"Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i";$id_ct_query$$=$obj_updated$$.virtual_payment_client_url;if(!$id_ct_query$$)throw"Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i giao d\u1ecbch n\u00e0y";
$id_ct_query$$=parseQuery($id_ct_query$$);let $data$$={vpc_AccessCode:$id_app$jscomp$3_onepay_configs$$.vpc_AccessCode,vpc_Command:"queryDR",vpc_MerchTxnRef:$id_ct_query$$.vpc_MerchTxnRef,vpc_Merchant:$id_app$jscomp$3_onepay_configs$$.vpc_Merchant,vpc_Password:$id_app$jscomp$3_onepay_configs$$.vpc_Password,vpc_User:$id_app$jscomp$3_onepay_configs$$.vpc_User,vpc_Version:"1"};const $secureCode$$=[];Object.keys($data$$).sort().forEach($key$$=>{const $value$$=$data$$[$key$$];$value$$.length>0&&$secureCode$$.push(`${$key$$}=${$value$$}`)});
$id_ct_query$$=toUpperCase(hashHmac("SHA256",$secureCode$$.join("&"),pack($id_app$jscomp$3_onepay_configs$$.SECURE_SECRET)));$data$$.vpc_SecureHash=$id_ct_query$$;$id_app$jscomp$3_onepay_configs$$=`${$id_app$jscomp$3_onepay_configs$$.vpc_querydr_url}`;let $rs$$;try{$rs$$=(await axios.post($id_app$jscomp$3_onepay_configs$$,new URLSearchParams($data$$))).data,$rs$$=parseQuery($rs$$)}catch($e$$){throw Logger.error($e$$,$id_app$jscomp$3_onepay_configs$$),$e$$;}if($onepay_transaction$$.trang_thai!="5"&&
$rs$$){let $id_transaction$$=$onepay_transaction$$._id;$rs$$.vpc_DRExists=="Y"&&$rs$$.vpc_TxnResponseCode=="0"&&await executeInTransaction(async()=>{await model.updateOne({_id:$id_transaction$$},{trang_thai:$rs$$.vpc_TxnResponseCode=="0"?"1":"2"});if($rs$$.vpc_TxnResponseCode=="0"){let $ctrl$$=global.controllers[$onepay_transaction$$.ma_ct.toUpperCase()];$ctrl$$&&$obj_updated$$&&($ctrl$$.handleAfterPayment?(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`})):(await $_v$$.updateOne({_id:$onepay_transaction$$.id_ct},{trang_thai:"5"}),$obj_updated$$.trang_thai="5",$ctrl$$.post&&(await controller.asyncPostData($obj_updated$$,$ctrl$$),controller.pushNotification($ctrl$$,$obj_updated$$,"update"))))}})}return $rs$$};
model.verifyReturnUrl=async($id_app$jscomp$4_virtualPaymentClientURL$$,$id_transaction$$,$query$$)=>{let $_onepay$$=await model.getInfo($id_app$jscomp$4_virtualPaymentClientURL$$,{_id:$id_transaction$$}),$onepay_configs$$=await model.getConfigs($id_app$jscomp$4_virtualPaymentClientURL$$,$_onepay$$.pt_thanh_toan);if(!$onepay_configs$$)throw"Miss configures for OnePay";$id_app$jscomp$4_virtualPaymentClientURL$$=$onepay_configs$$.vpc_url_payment;let $onepayIntl$$;$onepayIntl$$=$onepay_configs$$.domestic?
new OnePayDomestic({paymentGateway:$id_app$jscomp$4_virtualPaymentClientURL$$,merchant:$onepay_configs$$.vpc_Merchant,accessCode:$onepay_configs$$.vpc_AccessCode,secureSecret:$onepay_configs$$.SECURE_SECRET}):new OnePayInternational({paymentGateway:$id_app$jscomp$4_virtualPaymentClientURL$$,merchant:$onepay_configs$$.vpc_Merchant,accessCode:$onepay_configs$$.vpc_AccessCode,secureSecret:$onepay_configs$$.SECURE_SECRET});return new Promise($resolve$$=>{$onepayIntl$$.verifyReturnUrl($query$$).then(async $results$$=>
{try{await executeInTransaction(async()=>{await model.updateOne({_id:$id_transaction$$},{trang_thai:$results$$.isSuccess?"1":"2"});let $_v$$=global.getModel(`${$_onepay$$.ma_ct.toLowerCase()}`);const $obj_updated$$=await $_v$$.findOne({_id:$_onepay$$.id_ct});if($results$$.isSuccess){let $ctrl$$=global.controllers[$_onepay$$.ma_ct.toUpperCase()];$ctrl$$&&$obj_updated$$&&($ctrl$$.handleAfterPayment?(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`})):(await $_v$$.updateOne({_id:$_onepay$$.id_ct},{trang_thai:"5"}),$ctrl$$.post&&await controller.asyncPostData($obj_updated$$,$ctrl$$),controller.pushNotification($ctrl$$,$obj_updated$$,"update")),$results$$.result_url=$obj_updated$$.again_link||again_link)}else $results$$.result_url=$obj_updated$$.again_link||again_link;$results$$.result_url=$results$$.result_url||$onepay_configs$$.result_url;
$results$$.error_url=$onepay_configs$$.error_url})}catch($e$$){Logger.error("[onepay]error update status for voucher",$e$$)}$resolve$$($results$$)})})};module.exports=model;