~~~
class PayModels{
var $appid; //商户号
var $appkey; //商户秘钥
var $config;
var $baseurl="http://pay.qiyunoa.com/";
var $iv="1102130405061708";
public function __construct() {
//通过自己的方式获取商户号和密钥
$this->appid=$shop_config['pay']['appid'];
$this->appkey=$shop_config['pay']['appkey'];
}
public function getsign($data){
ksort($data);
foreach($data as $key=>$value){
if($value){
$arr[]="{$key}={$value}";
}
}
$str= implode("&", $arr);
$str.="&key={$this->appkey}";
$sign=strtoupper(md5($str));
return $sign;
}
//预下单
public function createorder($data,$paytype="wx"){
//$paytype类型 微信:wx
// 支付宝:zfb
// 百度钱包:bfb
// 小程序:xcx
// QQ钱包:qq
// 京东钱包:jd
global $_W;
$url="{$this->baseurl}/api/pay/createorder";
$post=Array(
"ordersn"=>$data['ordersn'],
"appid"=> $this->appid,
"price"=>$data['price'],
"title"=>$data['title'],
"body"=>$data['content'],
"paytype"=>$paytype,
"openid"=>$data['openid'],
"backurl"=>$_W['siteroot'] . 'payment/qypay/return.php',
);
$arr= $this->send($url, $post);
//兼容人人商城
$arr['timeStamp']=$arr['timestamp'];
$arr['nonceStr']=$arr['noncestr'];
$arr['signType']=$arr['signtype'];
$arr['paySign']=$arr['paysign'];
$arr['package']=$arr['packages'];
$arr['appId']=$arr['appid'];
return $arr;
}
//查询订单信息
public function order($ordersn,$type="wx"){
$url= $this->baseurl."/api/pay/order";
$post=Array(
"appid"=> $this->appid,
"ordersn"=>$ordersn,
"type"=>$type,
);
$arr= $this->send($url, $post);
return $arr;
}
//发送数据
public function send($url,$data){
$sign= $this->getsign($data);
$data['sign']=$sign;
$content= json_encode($data);
$post_data['appid']=$this->appid;
$post_data['content']= $this->encrypt($content);
$res= ihttp_post($url, $post_data);
$content=$this->decrypt($res['content']);
$arr= json_decode($content,true);
return $arr;
}
//加密
private function encrypt($encryptStr) {
$encryptStr.="{0000}";
$localIV = $this->iv;
$encryptKey = $this->iv;
//Open module
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
//print "module = $module <br/>" ;
mcrypt_generic_init($module, $encryptKey, $localIV);
//Padding
$block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$pad = $block - (strlen($encryptStr) % $block); //Compute how many characters need to pad
$encryptStr .= str_repeat(chr($pad), $pad); // After pad, the str length must be equal to block or its integer multiples
//encrypt
$encrypted = mcrypt_generic($module, $encryptStr);
//Close
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return base64_encode($encrypted);
}
private function decrypt($str){
$localIV = $this->iv;
$encryptKey = $this->iv;
//Open module
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, $localIV);
//print "module = $module <br/>" ;
mcrypt_generic_init($module, $encryptKey, $localIV);
$encryptedData = base64_decode($str);
$encryptedData = mdecrypt_generic($module, $encryptedData);
$res= explode("{0000}", $encryptedData);
$encryptedData=$res[0];
return $encryptedData;
}
//获取支付类型
public function getpaytype($code){
$substr= substr($code, 0,2);
if($substr=="13"){
$type="wx";
} elseif ($substr=='28') {
$type="zfb";
} elseif ($substr=="31") {
$type="bfb";
}
return $type;
}
public function payentry($data){
$url= $this->baseurl."/api/pay/pay";
$post=Array(
"appid"=> $this->appid,
"ordersn"=>$data['ordersn'],
"price"=>$data['price'],
"code"=>$data['code']
);
$substr= substr($data['code'], 0,2);
if($substr=="13"){
$post['paymethod']="wx";
} elseif ($substr=='28') {
$post['paymethod']="zfb";
$post['payway']="barcode";
$post['zfbtwo']="zfbtwo";
} elseif ($substr=="31") {
$post['paymethod']="bfb";
}
$arr= $this->send($url, $post);
return $arr;
}
}
~~~