You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
4.4 KiB
PHP
132 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace Think\Pay\Driver;
|
|
|
|
class Heepay extends \Think\Pay\Pay {
|
|
#网页支付地址
|
|
protected $gateway = 'https://pay.Heepay.com/Payment/Index.aspx';
|
|
#SDK支付地址
|
|
protected $gateway_sdk = 'https://pay.heepay.com/Phone/SDK/PayInit.aspx';
|
|
protected $config = array(
|
|
'partner' => '',
|
|
'key'=>'',
|
|
'email'=>'',
|
|
);
|
|
|
|
public function check() {
|
|
if (!$this->config['partner']) {
|
|
E("汇付宝设置有误!");
|
|
}
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* @param \Think\Pay\PayVo $vo
|
|
* @return mixed|null|string
|
|
*/
|
|
public function buildRequestForm(\Think\Pay\PayVo $vo) {
|
|
$param = array(
|
|
'version' => 1,
|
|
'agent_id' => $this->config['partner'],
|
|
'agent_bill_id' => $vo->getOrderNo(),
|
|
'agent_bill_time' => date('YmdHis', time()),
|
|
'pay_type' => $vo->getWay(),
|
|
'pay_amt' => $vo->getFee(),
|
|
'notify_url' => $this->config['notify_url'],
|
|
'return_url' => "http://www.3011.cn",//$this->config['return_url']
|
|
'goods_name' => iconv("UTF-8","GB2312",$vo->getTitle()),
|
|
'goods_num' => 1,
|
|
'goods_note' => iconv("UTF-8","GB2312",$vo->getBody()),
|
|
'remark' => "3011",
|
|
);
|
|
$param['user_ip'] = "::1";//get_client_ip(); //$this->createSign($param);
|
|
$param['sign'] = $this->createSign($param,$vo->getpayType());
|
|
|
|
if($vo->getWay() == 30 && !$vo->getpayType()){
|
|
if($vo->getpaWay == 1){
|
|
$param['is_phone'] = 1;
|
|
$param['is_frame'] = 0;
|
|
}
|
|
if($vo->getpaWay == 2){
|
|
$param['is_phone'] = 1;
|
|
$param['is_frame'] = 0;
|
|
}
|
|
}else if($vo->getWay == 20){
|
|
$param['bank_type'] = $vo->getBank();
|
|
}
|
|
$url = $vo->getpayType() == 1 ? $this->gateway_sdk : $this->gateway;
|
|
if($vo->getpayType() == 1){
|
|
$sHtml = $this->_curlFrom($param,$url);
|
|
}else{
|
|
$sHtml = $this->_buildForm($param,$url);
|
|
}
|
|
return $sHtml;
|
|
}
|
|
|
|
protected function createSign($params,$getpayType=0) {
|
|
$arg = '';
|
|
$arr0 = array('goods_name','goods_num','goods_note','remark','is_phone','is_frame','sign');
|
|
$arr1 = array('return_url','goods_name','goods_num','goods_note','remark','is_phone','is_frame','sign');
|
|
$arr = $getpayType == 0 ? $arr0 : $arr1;
|
|
foreach ($params as $key => $value) {
|
|
if ($value != "" && !in_array($key,$arr)) {
|
|
$arg .= "{$key}={$value}&";
|
|
}
|
|
}
|
|
//var_dump($arg . 'key=' . $this->config['key']);
|
|
return md5($arg . 'key=' . $this->config['key']);
|
|
}
|
|
|
|
protected function getSign($params) {
|
|
|
|
$arg = '';
|
|
foreach ($params as $key => $value) {
|
|
if ($value != "") {
|
|
$arg .= "{$key}={$value}&";
|
|
}
|
|
}
|
|
return md5($arg . 'key=' . $this->config['key']);
|
|
}
|
|
|
|
protected function setInfo($notify) {
|
|
$info = array();
|
|
//支付状态
|
|
$info['status'] = $notify['result'] ==1 ? true : false;
|
|
$info['money'] = $notify['pay_amt'];
|
|
$info['out_trade_no'] = $notify['agent_bill_id'];
|
|
$this->info = $info;
|
|
}
|
|
|
|
public function verifyNotify($notify) {
|
|
if(empty($notify['sign'])){
|
|
$this->setInfo($notify);
|
|
return true;
|
|
}
|
|
$param = array(
|
|
'result' => $notify['result'],
|
|
'agent_id' => $notify['agent_id'],
|
|
'jnet_bill_no' => $notify['jnet_bill_no'],
|
|
'agent_bill_id' => $notify['agent_bill_id'],
|
|
'pay_type' => $notify['pay_type'],
|
|
'pay_amt' => $notify['pay_amt'],
|
|
'remark' => iconv("GB2312","UTF-8//IGNORE",$notify['remark']),
|
|
);
|
|
$mySign = $this->getSign($param);
|
|
$return_sign = $notify['sign'];
|
|
if($mySign==$return_sign){ //比较签名密钥结果是否一致,一致则保证了数据的一致性
|
|
$this->setInfo($notify);
|
|
return true;
|
|
}
|
|
else{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
}
|
|
// result=1&
|
|
// agent_id=2069305&
|
|
// jnet_bill_no=H1606246259359A6&
|
|
// agent_bill_id=PF_201606241158596efS&
|
|
// pay_type=30&
|
|
// pay_amt=0.50&
|
|
// remark=%e6%b8%b8%e6%88%8f%e5%85%85%e5%80&
|