UNPKG

flexbiz-server

Version:

Flexible Server

25 lines (24 loc) 11.3 kB
'use strict';const {OnePayDomestic}=require("vn-payments"),{OnePayInternational}=require("vn-payments"),{pack,toUpperCase,hashHmac}=require("vn-payments/dist/utils"),axios=require("axios"),controller=require("../controllers/controller"),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().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$$,$_paymentViaOnePay$$)=>{if(!$pt_thanh_toan$$||!global.mongoose.Types.ObjectId.isValid($pt_thanh_toan$$))return null;$_paymentViaOnePay$$||($_paymentViaOnePay$$=await Ptthanhtoan.getInfo($id_app$$,{payment_service:"onepay",_id:$pt_thanh_toan$$}));return $_paymentViaOnePay$$&&"onepay"===$_paymentViaOnePay$$.payment_service?($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 console.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||("VND"==$order$$.ma_nt?"vn":"en"),vpc_TicketNo:$client_ip$$||":11"});return new Promise(($resolve$$,$reject$$)=>{$_onepay$$.save(($e$jscomp$0$$,$rs$jscomp$2$$)=>{if($e$jscomp$0$$)return $reject$$(Error($e$jscomp$0$$.message)); $e$jscomp$0$$=`${configs.domain?`https://${configs.domain}`:configs.api_url}/public/${$id_app$$}/onepay/${$rs$jscomp$2$$._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$jscomp$2$$.vpc_Locale;$data$$.transactionId=$rs$jscomp$2$$._id.toString();$data$$.orderId=$rs$jscomp$2$$.vpc_OrderInfo;$data$$.returnUrl=$e$jscomp$0$$;$data$$.clientIp=$rs$jscomp$2$$.vpc_TicketNo;$onepayIntl$$.buildCheckoutUrl($data$$).then($checkoutUrl$$=>{$resolve$$($checkoutUrl$$.href);$onepay_configs$$.vpc_querydr_url&&setTimeout(async()=>{try{let $rs$jscomp$0$$=await model.queryTransaction($id_app$$,$order$$._id);"Y"==$rs$jscomp$0$$.vpc_DRExists&&"0"!=$rs$jscomp$0$$.vpc_TxnResponseCode&& setTimeout(async()=>{try{let $rs$$=await model.queryTransaction($id_app$$,$order$$._id);"Y"==$rs$$.vpc_DRExists&&"0"!=$rs$$.vpc_TxnResponseCode&&setTimeout(async()=>{try{await model.queryTransaction($id_app$$,$order$$._id)}catch($e$$){console.error($e$$)}},122E4)}catch($e$$){console.error($e$$)}},122E4)}catch($e$$){console.error($e$$)}},12E5)}).catch($err$$=>{$reject$$(Error($err$$))})})})}; function parseQuery($pairs_queryString$$){var $query$$={};$pairs_queryString$$=("?"===$pairs_queryString$$[0]?$pairs_queryString$$.substr(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($_v_id_app$$,$id_ct_onepay_transaction$$)=>{$id_ct_onepay_transaction$$=await model.getInfo($_v_id_app$$,{id_ct:$id_ct_onepay_transaction$$});if(!$id_ct_onepay_transaction$$)throw"Giao d\u1ecbch kh\u00f4ng t\u1ed3n t\u1ea1i";var $id_transaction_onepay_configs$$=await model.getConfigs($_v_id_app$$,$id_ct_onepay_transaction$$.pt_thanh_toan);if(!$id_transaction_onepay_configs$$)throw"not found onepay configs";if(!$id_transaction_onepay_configs$$.vpc_querydr_url||!$id_transaction_onepay_configs$$.vpc_User|| !$id_transaction_onepay_configs$$.vpc_Password)throw"Ch\u01b0a khai b\u00e1o queryDR api cho ph\u01b0\u01a1ng th\u1ee9c thanh to\u00e1n qua onepay";$_v_id_app$$=global.getModel(`${$id_ct_onepay_transaction$$.ma_ct.toLowerCase()}`);const $obj_updated$$=await $_v_id_app$$.findOne({_id:$id_ct_onepay_transaction$$.id_ct});if(!$obj_updated$$)throw"Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i";var $query$$=$obj_updated$$.virtual_payment_client_url;if(!$query$$)throw"Ch\u1ee9ng t\u1eeb kh\u00f4ng t\u1ed3n t\u1ea1i giao d\u1ecbch n\u00e0y"; $query$$=parseQuery($query$$);let $data$$={vpc_AccessCode:$id_transaction_onepay_configs$$.vpc_AccessCode,vpc_Command:"queryDR",vpc_MerchTxnRef:$query$$.vpc_MerchTxnRef,vpc_Merchant:$id_transaction_onepay_configs$$.vpc_Merchant,vpc_Password:$id_transaction_onepay_configs$$.vpc_Password,vpc_User:$id_transaction_onepay_configs$$.vpc_User,vpc_Version:"1"};const $secureCode$$=[];Object.keys($data$$).sort().forEach($key$$=>{const $value$$=$data$$[$key$$];0<$value$$.length&&$secureCode$$.push(`${$key$$}=${$value$$}`)}); $query$$=toUpperCase(hashHmac("SHA256",$secureCode$$.join("&"),pack($id_transaction_onepay_configs$$.SECURE_SECRET)));$data$$.vpc_SecureHash=$query$$;$id_transaction_onepay_configs$$=`${$id_transaction_onepay_configs$$.vpc_querydr_url}`;let $rs$$;try{$rs$$=(await axios.post($id_transaction_onepay_configs$$,new URLSearchParams($data$$))).data,$rs$$=parseQuery($rs$$)}catch($e$$){throw console.error($e$$,$id_transaction_onepay_configs$$),$e$$;}if("5"!=$id_ct_onepay_transaction$$.trang_thai&&$rs$$&&($id_transaction_onepay_configs$$= $id_ct_onepay_transaction$$._id,"Y"==$rs$$.vpc_DRExists&&"0"==$rs$$.vpc_TxnResponseCode&&(await model.updateOne({_id:$id_transaction_onepay_configs$$},{trang_thai:"0"==$rs$$.vpc_TxnResponseCode?"1":"2"}),"0"==$rs$$.vpc_TxnResponseCode)))try{let $ctrl$$=global.controllers[$id_ct_onepay_transaction$$.ma_ct.toUpperCase()];if($ctrl$$&&$obj_updated$$)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$$)}else await $_v_id_app$$.updateOne({_id:$id_ct_onepay_transaction$$.id_ct},{trang_thai:"5"}),$obj_updated$$.trang_thai="5",$ctrl$$.post&&controller.postData($obj_updated$$,$ctrl$$,async()=>{controller.pushNotification($ctrl$$,$obj_updated$$,"update")})}catch($e$$){console.error("error update status for voucher",$id_ct_onepay_transaction$$.ma_ct,$e$$)}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$$=> {await model.findOneAndUpdate({_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)try{let $ctrl$$=global.controllers[$_onepay$$.ma_ct.toUpperCase()];if($ctrl$$&&$obj_updated$$){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.error("error handle after payment", $e$$)}else await $_v$$.findOneAndUpdate({_id:$_onepay$$.id_ct},{trang_thai:"5"}),$ctrl$$.post?controller.postData($obj_updated$$,$ctrl$$,async()=>{controller.pushNotification($ctrl$$,$obj_updated$$,"update")}):controller.pushNotification($ctrl$$,$obj_updated$$,"update");$results$$.result_url=$obj_updated$$.again_link||again_link}}catch($e$$){$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;$resolve$$($results$$)})})};module.exports=model;