UNPKG

flexbiz-server

Version:

Flexible Server

18 lines (17 loc) 7.17 kB
'use strict';const controller=require("../controllers/controller"),Ptthanhtoan=global.getModel("ptthanhtoan"),hmacSHA256=require("crypto-js/hmac-sha256"),axios=require("axios"),moment=require("moment"),zaloScheam=new Schema({id_app:{type:String,required:!0,maxlength:1024},id_ct:{type:String,required:!0,maxlength:1024},apptransid:String,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&&(zaloScheam.index({id_app:1}),zaloScheam.index({id_ct:1}),zaloScheam.index({apptransid:1}),zaloScheam.index({trang_thai:1}),zaloScheam.index({pt_thanh_toan:1}));const model=mongoose.models.zalo||mongoose.model("zalo",zaloScheam),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$$,$_paymentViazalo$$)=>{if(!$pt_thanh_toan$$||!global.mongoose.Types.ObjectId.isValid($pt_thanh_toan$$))return null;$_paymentViazalo$$||($_paymentViazalo$$=await Ptthanhtoan.getInfo($id_app$$,{_id:$pt_thanh_toan$$}));return $_paymentViazalo$$||"zalo"===$_paymentViazalo$$.payment_service?($id_app$$=$_paymentViazalo$$.zalo_configs)&&$id_app$$.endpoint&&$id_app$$.appid&&$id_app$$.key1&&$id_app$$.key2?$id_app$$:($id_app$$=configs.zalo_configs)&&$id_app$$.endpoint&& $id_app$$.appid&&$id_app$$.key1&&$id_app$$.key2?$id_app$$:null:(console.error("Phuong thuc thanh toan khong ton tai"),null)}; model.createVirtualPaymentClientURL=async($order$$,$client_ip$$,$_paymentViazalo$$)=>{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 $zalo_configs$$=await model.getConfigs($id_app$$,$order$$.pt_thanh_toan,$_paymentViazalo$$);if(!$zalo_configs$$)return console.error("not found zalo configs"),"";let $apptime$$=(new Date).getTime(),$apptransid$$=moment($apptime$$).format("YYMMDD")+ "_"+$order$$.so_ct,$_zalo$$=new model({id_app:$id_app$$,id_ct:$order$$._id,ma_ct:$order$$.ma_ct,apptransid:$apptransid$$,pt_thanh_toan:$order$$.pt_thanh_toan,client_ip:$client_ip$$||":11"});return new Promise(($resolve$$,$reject$$)=>{$_zalo$$.save(($appid_body_e$$,$embeddata_rs$$)=>{if($appid_body_e$$)return $reject$$(Error($appid_body_e$$.message));$appid_body_e$$=$zalo_configs$$.appid;let $appuser$$=$order$$.user_created;$embeddata_rs$$={request_id:$embeddata_rs$$._id.toString(),redirecturl:`${configs.domain? `https://${configs.domain}`:configs.api_url}/public/${$id_app$$}/zalo/${$embeddata_rs$$._id.toString()}/callback`};let $item$$=$order$$.details.map($d$$=>({ma_vt:$d$$.ma_vt,ten_vt:$d$$.ten_vt,sl_xuat:$d$$.sl_xuat})),$bankcode$$=$zalo_configs$$.bankcode||"",$description$$=$order$$.dien_giai||"Pay with zalo";var $mac_rawSignature$$=$appid_body_e$$+"|"+$apptransid$$+"|"+$appuser$$+"|"+$amount$$+"|"+$apptime$$+"|"+JSON.stringify($embeddata_rs$$)+"|"+JSON.stringify($item$$);$mac_rawSignature$$=hmacSHA256($mac_rawSignature$$, $zalo_configs$$.key1).toString();$appid_body_e$$={amount:$amount$$,appid:$appid_body_e$$,appuser:$appuser$$,apptime:$apptime$$,apptransid:$apptransid$$,embeddata:JSON.stringify($embeddata_rs$$),item:JSON.stringify($item$$),bankcode:$bankcode$$,mac:$mac_rawSignature$$,description:$description$$};axios.post($zalo_configs$$.endpoint,new URLSearchParams($appid_body_e$$)).then($res$$=>{if(1!=$res$$.data.returncode)return console.error($res$$.data),$reject$$(Error($res$$.data.returnmessage));$resolve$$($res$$.data.orderurl)}).catch($error$$=> {$reject$$($error$$)})})})}; model.handleNotify=async($id_app$$,$callback_data$$,$callback$$)=>{try{const $body_receiver$$=JSON.parse($callback_data$$);let $id_transaction$$=$body_receiver$$.embeddata.request_id;if(!$id_transaction$$)return $callback$$(null,{returncode:9,returnmessage:"Kh\u00f4ng tim th\u1ea5y giao d\u1ecbch n\u00e0y"});const $trans$$=await model.findOne({_id:$id_transaction$$}),$service_configs$$=await model.getConfigs($id_app$$,$trans$$.pt_thanh_toan);if(hmacSHA256($callback_data$$.data,$service_configs$$.key2).toString()!== $body_receiver$$.mac)return $callback$$(null,{returncode:9,returnmessage:"Mac kh\u00f4ng kh\u1edbp"});$callback$$(null,{returncode:1,returnmessage:"Callback h\u1ee3p l\u00fd"})}catch($e$$){console.error($e$$),$callback$$(null,{returncode:9,returnmessage:"Kh\u00f4ng th\u1ec3 x\u00e1c th\u1ef1c giao d\u1ecbch"})}}; model.verifyReturnUrl=async($apptransid$jscomp$1_id_app$$,$id_transaction$$)=>{let $_zalo$$=await model.getInfo($apptransid$jscomp$1_id_app$$,{_id:$id_transaction$$}),$zalo_configs$$=await model.getConfigs($apptransid$jscomp$1_id_app$$,$_zalo$$.pt_thanh_toan);if(!$zalo_configs$$)throw"Miss configures for zalo";$apptransid$jscomp$1_id_app$$=$_zalo$$.apptransid;let $appid$$=$zalo_configs$$.appid,$mac$$=hmacSHA256($appid$$+"|"+$apptransid$jscomp$1_id_app$$+"|"+$zalo_configs$$.key1,$zalo_configs$$.key1).toString(), $body$$={appid:$appid$$,apptransid:$apptransid$jscomp$1_id_app$$,mac:$mac$$};return new Promise(($resolve$$,$reject$$)=>{axios.post($zalo_configs$$.endpoint_status,new URLSearchParams($body$$)).then(async $response_results$$=>{$response_results$$=$response_results$$.data;$response_results$$.isSuccess=1==$response_results$$.returncode;var $_v_obj_updated$$=global.getModel(`${$_zalo$$.ma_ct.toLowerCase()}`);if($response_results$$.isSuccess){await model.findOneAndUpdate({_id:$id_transaction$$},{trang_thai:0== $response_results$$.isSuccess?"1":"2"});try{await $_v_obj_updated$$.findOneAndUpdate({_id:$_zalo$$.id_ct},{trang_thai:"5"});const $obj_updated$$=await $_v_obj_updated$$.findOne({_id:$_zalo$$.id_ct});let $ctrl$$=global.controllers[$_zalo$$.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_results$$.result_url=$obj_updated$$.again_link||again_link}}catch($e$$){console.log("error update status for voucher",$_zalo$$.ma_ct,$e$$)}}else $_v_obj_updated$$=await $_v_obj_updated$$.findOne({_id:$_zalo$$.id_ct}),$response_results$$.result_url=$_v_obj_updated$$.again_link|| again_link;$response_results$$.result_url=$response_results$$.result_url||again_link;$response_results$$.error_url="";$response_results$$.message=$response_results$$.returnmessage;$resolve$$($response_results$$)}).catch($error$$=>{$reject$$($error$$)})})};module.exports=model;