合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
~~~ 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; } } ~~~