payUrl == null) { $this->payUrl = Yii::$app->params['huayin.payUrl']; } if ($this->merchantCode == null) { $this->merchantCode = Yii::$app->params['huayin.merchantCode']; } if ($this->publicKey == null) { $this->publicKey = Yii::$app->params['huayin.publicKey']; } if ($this->privateKey == null) { $this->privateKey = Yii::$app->params['huayin.privateKey']; } } /** * @param array $deposit * @param array $params * @return string */ public function outPay($deposit, $params = []) { $data = []; $data['merchant_code'] = $this->merchantCode; // 参数名称:商家号 商户签约时,华银分配给商家的唯一身份标识 $data['service_type'] = 'direct_pay'; // 参数名称:服务类型 固定值:direct_pay $data['notify_url'] = $this->notifyUrl; // 参数名称:服务器异步通知地址 支付成功后,华银会主动发送通知给商户,商户必须指定此通知地址 $data['interface_version'] = 'V3.0'; // 参数名称:接口版本 $data['input_charset'] = 'UTF-8'; // 参数名称:参数编码字符集 取值:UTF-8、GBK(必须大写) $data['sign_type'] = 'RSA-S'; // 参数名称:签名方式 // 1.取值为:RSA或RSA-S,RSA使用pfx证书文件进行数据加密,RSA-S使用字符串密钥进行数据加密,商户需要从中选择一个值 // 2.该字段不参与签名 // $data['sign'] = ''; // 参数名称:签名数据 该字段不参与签名,值如何获取,请参考华银提供的示例代码。 $data['return_url'] = $this->returnUrl; // 参数名称:页面跳转同步通知地址 支付成功后,通过页面跳转的方式跳转到商家网站 $data['pay_type'] = 'b2c'; // 参数名称:支付类型 取值如下(必须小写,多选时请用逗号隔开)b2c(网银支付),weixin(微信扫码),alipay_scan(支付宝扫码),tenpay_scan(qq钱包扫码) $data['client_ip'] = isset($params['ip']) ? $params['ip'] : Utils::getClientIp(); // 参数名称:客户端IP 消费者创建交易时所使用机器的IP,最大长度为15个字符。举例:183.62.225.12 $data['client_ip_check'] = '0'; // 参数名称:客户端IP是否校验标识 当值为1校验客户端IP;当值为0不校验客户端IP; $data['order_no'] = $deposit['id']; // 参数名称:商家订单号 商家网站生成的订单号,由商户保证其唯一性,由字母、数字、下划线组成。 $data['order_time'] = date('Y-m-d H:i:s'); // 参数名称:商家订单时间 时间格式:yyyy-MM-dd HH:mm:ss $data['order_amount'] = number_format($deposit['rmb'], 2, '.', ''); // 参数名称:商家订单金额 以元为单位,精确到小数点后两位.例如:12.01 $data['bank_code'] = $params['bankCode']; // 参数名称:网银直连银行代码 参见附录中的银行代码对照表,当该参数为空或与对照表中银行编码不一致时,直接跳转到华银收银台选择银行页面 // $data['redo_flag'] = ''; // 参数名称:是否允许重复订单 当值为1时不允许商户订单号重复提交;当值为 0或空时允许商户订单号重复提交 $data['product_name'] = 'RJ' . $deposit['id']; // 参数名称:商品名称 // $data['product_code'] = ''; // 参数名称:商品编号 // $data['product_num'] = ''; // 参数名称:商品数量 必须是整型数字 // $data['product_desc'] = ''; // 参数名称:商品描述 // $data['extra_return_param'] = ''; // 参数名称:回传参数 商户如果支付请求是传递了该参数,则通知商户支付成功时会回传该参数 // $data['extend_param'] = ''; // 参数名称:业务扩展参数 格式:参数名1^参数值1|参数名2^参数值2...,多个参数使用“|”进行分割 例如:name ^Zhang San|sex^Male 跨境商家必选,非跨境商家可选 // $data['show_url'] = ''; // 参数名称:商品展示URL 不得超过200个字符 // $data['orders_info'] = ''; // 储存子订单的相关信息,限制20个商品 $data['sign'] = PayUtils::makeSign($data, $this->privateKey); return static::createHtml($data, $this->payUrl); } /** * @param array $data * @return bool */ public function handleNotify($data) { if (PayUtils::checkSign($data, $this->publicKey)) { if (isset($data['trade_status']) && $data['trade_status'] == 'SUCCESS') { $merOrderId = trim($data['order_no']); // $merOrderId = str_ireplace("SN", "", $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; } public function outNotify($success) { if ($success == true) { return "SUCCESS"; } else { return "ERROR"; } } /** * @param array $data * @return bool */ public function handleReturn($data) { if (PayUtils::checkSign($data, $this->publicKey)) { if (isset($data['trade_status']) && $data['trade_status'] == 'SUCCESS') { $merOrderId = trim($data['order_no']); // $merOrderId = str_ireplace("SN", "", $merOrderId); /** @var Deposit $model */ $model = Deposit::find()->where(['id' => $merOrderId])->asArray()->limit(1)->one(); if ($model) { return true; } } } return false; } public function outReturn($success) { } }