123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410 |
- <?php
- namespace huoMpay;
- use huo\controller\common\Base;
- use huo\controller\common\HuoSession;
- use huo\controller\pay\Notify;
- use huo\controller\pay\Sdk;
- use huo\controller\pay\SdkOrderCache;
- use huolib\constant\OrderConst;
- use huolib\constant\PaywayConst;
- use huolib\status\OrderStatus;
- use huolib\tool\StrUtils;
- use huomp\controller\game\GameMini;
- use huomp\model\wallet\MgmLogModel;
- use huomp\model\wallet\MidasGmMemModel;
- use think\Log;
- class Payments extends Base {
- const MGM_QUERY = 1;
- const MGM_PAY = 2;
- const MGM_PRESENT = 3;
- const MGM_CANCEL = 4;
-
- public function getBalanceAndPay($mem_id, $order_id) {
- if (empty($order_id)) {
- $_code = OrderStatus::ORDER_ID_EMPTY;
- return $this->huoError($_code, OrderStatus::getMsg($_code));
- }
- $_soc_class = SdkOrderCache::ins();
- $_order_data = $_soc_class->getInfoByOrderId($order_id);
- if (empty($_order_data)) {
- $_code = OrderStatus::ORDER_ID_ERROR;
- return $this->huoError($_code, OrderStatus::getMsg($_code));
- }
- if ($mem_id != $_order_data['mem_id']) {
- $_code = OrderStatus::ORDER_NOT_EXISTS;
- return $this->huoError($_code, OrderStatus::getMsg($_code));
- }
- $mem_id = $_order_data['mem_id'];
- $_rdata['status'] = $_order_data['status'];
- $_rdata['cp_status'] = $_order_data['cp_status'];
- if (OrderConst::CP_STATUS_SUC != $_order_data['cp_status']
- && OrderConst::PAY_STATUS_SUC == $_order_data['status']) {
- $_rs = (new Notify())->notify($order_id);
- if (OrderStatus::NO_ERROR == $_rs['code']) {
- $_rdata['status'] = OrderConst::PAY_STATUS_SUC;
- $_rdata['cp_status'] = OrderConst::CP_STATUS_SUC;
- }
- $_code = OrderStatus::NO_ERROR;
- return $this->huoSuccess($_code, OrderStatus::getMsg($_code), $_rdata);
- }
-
- $_rs = $this->midasGetBalance($mem_id, $order_id);
- if (OrderStatus::NO_ERROR != $_rs['code']) {
- return $this->huoError($_rs['code'], $_rs['msg']);
- }
- $_data = $_rs['data'];
- $_mgm_model = (new MidasGmMemModel());
- $_mgm_data = $_mgm_model->getDataOrInsert($mem_id, $_order_data['app_id']);
- $_diff_gm_cnt = StrUtils::formatNumber($_data['save_amt'] - $_mgm_data['m_save_amt']);
-
- $_product_cnt = StrUtils::formatNumber($_order_data['product_cnt']);
-
- if ($_diff_gm_cnt < $_product_cnt) {
- $_code = OrderStatus::NOTIFY_AMOUNT_ERROR;
- Log::write(
- "func=".__FUNCTION__."&class=".__CLASS__."&step1&code=".$_code.'&data.'
- .http_build_query($_data).'&order_data='.http_build_query($_order_data).'&mgm_data='.http_build_query(
- $_mgm_data
- ).'&diff_gm_cnt='.$_diff_gm_cnt.'&product_cnt='.$_product_cnt.'&rs='.json_encode($_rs),
- LOG::ERROR
- );
- return $this->huoError($_code, OrderStatus::getMsg($_code));
- }
-
-
- $_rs = $this->midasPay($mem_id, $order_id);
- if (OrderStatus::NO_ERROR != $_rs['code'] && 90012 != $_rs['code']) {
- return $this->huoError($_rs['code'], $_rs['msg']);
- }
- $_rs = (new Notify())->payNotify(
- $_order_data['product_id'], $order_id, '', $_order_data['amount'], $_order_data['payway']
- );
- if (false == $_rs) {
- $_code = OrderStatus::INNER_ERROR;
- return $this->huoError($_code, OrderStatus::getMsg($_code));
- }
-
- $_mgm_data['m_balance'] = $_data['balance'] - $_product_cnt;
- $_mgm_data['m_gen_balance'] = $_data['gen_balance'];
- $_mgm_data['m_save_amt'] += $_product_cnt;
- $_mgm_data['m_save_sum'] = $_data['save_sum'];
- $_mgm_data['m_cost_sum'] = $_data['cost_sum'];
- $_mgm_data['m_present_sum'] = $_data['present_sum'];
- $_mgm_data['sum_money'] += $_order_data['amount'];
- $_mgm_data['total'] += $_product_cnt;
- $_mgm_data['remain'] += $_mgm_data['m_balance'];
- $_mgm_model->updateData($_mgm_data, $_mgm_data['id']);
-
-
- $_statues = (new Sdk())->getStatus($order_id);
- if (false == $_statues) {
- $_code = OrderStatus::ORDER_ID_ERROR;
- return $this->huoError($_code, OrderStatus::getMsg($_code), $_rdata);
- }
- $_code = OrderStatus::NO_ERROR;
- $_rdata = [
- 'order_id' => $order_id,
- 'status' => $_statues['status'],
- 'cp_status' => $_statues['cp_status']
- ];
- return $this->huoSuccess($_code, OrderStatus::getMsg($_code), $_rdata);
- }
-
- public function getBaseParam($app_id, $is_sand = false) {
- $_mpay_data = (new GameMini())->getMpayConf($app_id, $is_sand);
- $_rdata['appid'] = $_mpay_data['appid'];
- $_rdata['offer_id'] = $_mpay_data['offer_id'];
- $_rdata['ts'] = time();
- $_rdata['zone_id'] = '1';
- $_rdata['pf'] = 'android';
- $_rdata['app_secret'] = $_mpay_data['app_secret'];
- $_rdata['app_key'] = $_mpay_data['app_key'];
- return $_rdata;
- }
-
- public function getOpenId($mem_id, $app_id = 0) {
- $_open_id = (new HuoSession($mem_id, $app_id))->getOpenId();
- if (!empty($_open_id)) {
- return $_open_id;
- }
- return '';
- }
-
- public function getSessionKey($mem_id, $app_id) {
- $_session_key = (new HuoSession($mem_id, $app_id))->getAccessToken();
- if (!empty($_session_key)) {
- return $_session_key;
- }
- return '';
- }
-
- public function midasGetBalance($mem_id, $order_id = '') {
- $_order_data = SdkOrderCache::ins()->getInfoByOrderId($order_id);
- $_is_sand = true;
- if (PaywayConst::PAYWAY_MPAY == $_order_data['payway']) {
- $_is_sand = false;
- }
- $_app_id = $_order_data['app_id'];
- $_uri = '/cgi-bin/midas/getbalance';
- if ($_is_sand) {
- $_uri = '/cgi-bin/midas/sandbox/getbalance';
- }
- $_base_params = $this->getBaseParam($_app_id, $_is_sand);
- $_open_id = $this->getOpenId($mem_id, $_app_id);
- $_session_key = $this->getSessionKey($mem_id, $_app_id);
- $_params = [
- 'openid' => $_open_id,
- 'appid' => $_base_params['appid'],
- 'offer_id' => $_base_params['offer_id'],
- 'ts' => $_base_params['ts'],
- 'zone_id' => $_base_params['zone_id'],
- 'pf' => $_base_params['pf'],
-
- ];
- $_mp_app_secret = $_base_params['app_secret'];
- $_midas_app_key = $_base_params['app_key'];
- $_rs = MpaySign::apiPay($_uri, $_params, $_mp_app_secret, $_midas_app_key, $_session_key);
- if (OrderStatus::NO_ERROR == $_rs['code']) {
- $_mgm_log_data['mem_id'] = $mem_id;
- $_mgm_log_data['app_id'] = $_order_data['app_id'];
- $_mgm_log_data['order_id'] = $_order_data['order_id'];
- $_mgm_log_data['m_balance'] = $_rs['data']['balance'];
- $_mgm_log_data['m_gen_balance'] = $_rs['data']['gen_balance'];
- $_mgm_log_data['m_save_amt'] = $_rs['data']['save_amt'];
- $_mgm_log_data['m_save_sum'] = $_rs['data']['save_sum'];
- $_mgm_log_data['m_cost_sum'] = $_rs['data']['cost_sum'];
- $_mgm_log_data['m_present_sum'] = $_rs['data']['present_sum'];
- $_mgm_log_data['server_id'] = $_base_params['zone_id'];
- $_mgm_log_data['type'] = self::MGM_QUERY;
- (new MgmLogModel())->insertLog($_mgm_log_data);
- }
- return $_rs;
- }
-
- function midasCancelPay($mem_id, $order_id) {
- $_order_data = SdkOrderCache::ins()->getInfoByOrderId($order_id);
- $_is_sand = true;
- if (PaywayConst::PAYWAY_MPAY == $_order_data['payway']) {
- $_is_sand = false;
- }
- $_app_id = $_order_data['app_id'];
- $_uri = '/cgi-bin/midas/cancelpay';
- if ($_is_sand) {
- $_uri = '/cgi-bin/midas/sandbox/cancelpay';
- }
- $_base_params = $this->getBaseParam($_app_id, $_is_sand);
- $_open_id = $this->getOpenId($mem_id);
- $_session_key = $this->getSessionKey($mem_id);
- $_params = [
- 'openid' => $_open_id,
- 'appid' => $_base_params['appid'],
- 'offer_id' => $_base_params['offer_id'],
- 'ts' => $_base_params['ts'],
- 'zone_id' => $_base_params['zone_id'],
- 'pf' => $_base_params['pf'],
-
- 'bill_no' => $_order_data['order_id'],
-
- ];
- $_mp_app_secret = $_base_params['app_secret'];
- $_midas_app_key = $_base_params['app_key'];
- $_rs = MpaySign::apiPay($_uri, $_params, $_mp_app_secret, $_midas_app_key, $_session_key);
- if (OrderStatus::NO_ERROR == $_rs['code']) {
- $_mgm_log_data['mem_id'] = $mem_id;
- $_mgm_log_data['app_id'] = $_order_data['app_id'];
- $_mgm_log_data['order_id'] = $_order_data['order_id'];
- $_mgm_log_data['type'] = self::MGM_CANCEL;
- (new MgmLogModel())->insertLog($_mgm_log_data);
- }
- return $_rs;
- }
-
- function midasPay($mem_id, $order_id) {
- $_order_data = SdkOrderCache::ins()->getInfoByOrderId($order_id);
- $_is_sand = true;
- if (PaywayConst::PAYWAY_MPAY == $_order_data['payway']) {
- $_is_sand = false;
- }
- $_app_id = $_order_data['app_id'];
- $_uri = '/cgi-bin/midas/pay';
- if ($_is_sand) {
- $_uri = '/cgi-bin/midas/sandbox/pay';
- }
- $_base_params = $this->getBaseParam($_app_id, $_is_sand);
- $_open_id = $this->getOpenId($mem_id, $_app_id);
- $_session_key = $this->getSessionKey($mem_id, $_app_id);
- $_params = [
- 'openid' => $_open_id,
- 'appid' => $_base_params['appid'],
- 'offer_id' => $_base_params['offer_id'],
- 'ts' => $_base_params['ts'],
- 'zone_id' => $_base_params['zone_id'],
- 'pf' => $_base_params['pf'],
-
-
-
- 'amt' => $_order_data['product_cnt'],
- 'bill_no' => $_order_data['order_id'],
- ];
- $_mp_app_secret = $_base_params['app_secret'];
- $_midas_app_key = $_base_params['app_key'];
- $_rs = MpaySign::apiPay($_uri, $_params, $_mp_app_secret, $_midas_app_key, $_session_key);
- if (OrderStatus::NO_ERROR == $_rs['code']) {
- $_mgm_log_data['mem_id'] = $mem_id;
- $_mgm_log_data['app_id'] = $_order_data['app_id'];
- $_mgm_log_data['order_id'] = $_rs['data']['bill_no'];
- $_mgm_log_data['m_balance'] = $_rs['data']['balance'];
- $_mgm_log_data['m_used_gen_balance'] = isset($_rs['data']['used_gen_amt'])
- ? $_rs['data']['used_gen_amt'] : 0;
- $_mgm_log_data['type'] = self::MGM_PAY;
- (new MgmLogModel())->insertLog($_mgm_log_data);
- }
- return $_rs;
- }
-
- function midasPresent($mem_id, $order_id, $present_counts) {
- $_order_data = SdkOrderCache::ins()->getInfoByOrderId($order_id);
- $_is_sand = true;
- if (PaywayConst::PAYWAY_MPAY == $_order_data['payway']) {
- $_is_sand = false;
- }
- $_app_id = $_order_data['app_id'];
- $_uri = '/cgi-bin/midas/present';
- if ($_is_sand) {
- $_uri = '/cgi-bin/midas/sandbox/present';
- }
- $_base_params = $this->getBaseParam($_app_id, $_is_sand);
- $_open_id = $this->getOpenId($mem_id);
- $_session_key = $this->getSessionKey($mem_id);
- $_params = [
- 'openid' => $_open_id,
- 'appid' => $_base_params['appid'],
- 'offer_id' => $_base_params['offer_id'],
- 'ts' => $_base_params['ts'],
- 'zone_id' => $_base_params['zone_id'],
- 'pf' => $_base_params['pf'],
-
- 'bill_no' => $_order_data['order_id'],
- 'present_counts' => $present_counts,
- ];
- $_mp_app_secret = $_base_params['app_secret'];
- $_midas_app_key = $_base_params['app_key'];
- $_rs = MpaySign::apiPay($_uri, $_params, $_mp_app_secret, $_midas_app_key, $_session_key);
- if (OrderStatus::NO_ERROR == $_rs['code']) {
- $_mgm_log_data['mem_id'] = $mem_id;
- $_mgm_log_data['app_id'] = $_order_data['app_id'];
- $_mgm_log_data['order_id'] = $_rs['data']['bill_no'];
- $_mgm_log_data['m_balance'] = $_rs['data']['balance'];
- $_mgm_log_data['type'] = self::MGM_PRESENT;
- (new MgmLogModel())->insertLog($_mgm_log_data);
- }
- return $_rs;
- }
- }
|