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

<?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&