payUrl == null) { $this->payUrl = Yii::$app->params['balpal.payUrl']; } if ($this->merCd == null) { $this->merCd = Yii::$app->params['balpal.merCd']; } if ($this->secretKey == null) { $this->secretKey = Yii::$app->params['balpal.secretKey']; } } /** * @param array $deposit * @param array $params * @return string */ public function outPay($deposit, $params = []) { $data = []; $data['versionNo'] = 'V01'; // 版本号 V01固定 $data['txnCd'] = 'T00100'; // 交易类型 // $data['insCd'] = ''; // 机构号 $data['merCd'] = $this->merCd; // 商户号 $data['merOrderNo'] = 'SN0000000000' . $deposit['id']; // 商户订单号 $data['txnSubmitTime'] = date('YmdHis'); // 提交时间 YYYYMMDDhhmmss格式 $data['txnAmt'] = number_format($deposit['rmb'], 2, '.', ''); // 金额 单位:元 $data['txnGoodsName'] = 'RJ' . $deposit['id']; // 商品名称 需进行URLEncoder编码 // $data['txnGoodsDesc'] = ''; // 商品描述 需进行URLEncoder编码 // $data['txnOrderDesc'] = ''; // 订单描述 需进行URLEncoder编码 $data['pageBackUrl'] = $this->returnUrl; // 前台通知地址 $data['notifyUrl'] = $this->notifyUrl; // 后台通知地址 $data['bankCode'] = $params['bankCode']; // 银行简称 // $data['remarks'] = ''; // 交易备注 $data['signType'] = 'HmacSHA1'; // 签名类型 不参与签名(HmacSHA1) $data['signData'] = PayUtils::makeSign($data, $this->secretKey); // 签名数据 不参与签名 return static::createHtml($data, $this->payUrl); } /** * @param array $data * @return bool */ public function handleNotify($data) { if (isset($data['txnAmt'])) { $data['txnAmt'] = number_format($data['txnAmt'], 2, '.', ''); } if (PayUtils::checkSign($data, $this->secretKey)) { if (isset($data['txnSta']) && $data['txnSta'] == '000000') { $merOrderId = trim($data['merOrderNo']); $merOrderId = str_ireplace("SN0000000000", "", $merOrderId); /** @var Deposit $model */ $model = Deposit::find()->where(['id' => $merOrderId])->asArray()->limit(1)->one(); if ($model) { // $model->type = 1; // $model->save(false); return true; } } } return false; } /** * @param bool $success * @return string */ public function outNotify($success) { if ($success == true) { return "OK"; } else { return "FAIL"; } } /** * @param array $data * @return bool */ public function handleReturn($data) { if (isset($data['txnAmt'])) { $data['txnAmt'] = number_format($data['txnAmt'], 2, '.', ''); } if (PayUtils::checkSign($data, $this->secretKey)) { if (isset($data['txnSta']) && $data['txnSta'] == '000000') { $merOrderId = trim($data['merOrderNo']); $merOrderId = str_ireplace("SN0000000000", "", $merOrderId); /** @var Deposit $model */ $model = Deposit::find()->where(['id' => $merOrderId])->asArray()->limit(1)->one(); if ($model) { return true; } } } return false; } /** * @param bool $success */ public function outReturn($success) { } }