php微信h 5支払い、親測利用可能、非微信ブラウザ
6712 ワード
コードを貼った
//curlリクエスト
public function pay(){
header("Content-type:text/html;charset=utf-8");
$out_trade_no = I('get.out_trade_no'); // 、 。
$sign = I('get.sign');
$check_sign = sha1($out_trade_no);
if($sign !== $check_sign){
echo "alert(' ');history.go(-1); ";
return false;
}
$list= M('juankuan')->where(array('number'=>$out_trade_no))->find();
if(!$list) $this->jsonReturn(0,' ','');
$url='https://api.mch.weixin.qq.com/pay/unifiedorder'; //
$appid='';// appid
$appsecret='';
$mch_id='';// id
$nonce_str='qyzf'.rand(1, 999999);//
//$out_trade_no= 'dbjz'.date('Ymd').'_'.$id.'_'.substr(time(),4).rand(1,10000);
$ip=$this->getClientIp();
$scene_info='{"h5_info": {"type":"Wap","app_name": "project info","package_name": "wap "}}';
$total_fee=$list['money'] * 100; // *100
$trade_type='MWEB';
$attach=' ';
$body=' ';
$notify_url='notify'; //
$arr=array(
'appid'=>$appid,
'mch_id'=>$mch_id,
'nonce_str'=>$nonce_str,
'out_trade_no'=>$out_trade_no,
'spbill_create_ip'=>$ip,
'scene_info'=>$scene_info,
// 'openid'=>$openid,
'total_fee'=>$total_fee,
'trade_type'=>$trade_type,
'attach'=>$attach,
'body'=>$body,
'notify_url'=>$notify_url
);
$sign=$this->getSign($arr);
//'.$openid.'
$data='
'.$appid.'
'.$attach.'
'.$body.'
'.$mch_id.'
'.$nonce_str.'
'.$notify_url.'
'.$out_trade_no.'
'.$ip.'
'.$total_fee.'
'.$trade_type.'
'.$scene_info.'
'.$sign.'
';
$result=$this->https_request($url,$data);
// echo '====================';
// var_dump($result);
// echo '*******************';
// xml
libxml_disable_entity_loader(true);
$result_info = json_decode(json_encode(simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
// print_r($result_info);
$this->assign('result_info',$result_info);//$result_info['mweb_url'];// ,
$this->assign('list',$list);
$this->display();
}
/**
* h5
*/
public function notify()
{
$str_Post = $GLOBALS["HTTP_RAW_POST_DATA"];
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($str_Post, 'SimpleXMLElement', LIBXML_NOCDATA);
$postObj = json_encode($postObj);
$postObj = json_decode($postObj, true);
$out_trade_no = trim($postObj["out_trade_no"]);
if ($postObj["result_code"] == 'SUCCESS' && $postObj["return_code"] == 'SUCCESS') {
// 。
}
}
//curlリクエスト
public function https_request($url, $data) {
$curl = curl_init(); // CURL
curl_setopt($curl, CURLOPT_URL, $url); //
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); //
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // SSL
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); //
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // Referer
curl_setopt($curl, CURLOPT_POST, 1); // Post
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post
curl_setopt($curl, CURLOPT_TIMEOUT, 30); //
curl_setopt($curl, CURLOPT_HEADER, 0); // Header
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); //
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
/**
* @return ip
*/
private function getClientIp()
{
$cip='unknown';
if ($_SERVER['REMOTE_ADDR']){
$cip=$_SERVER['REMOTE_ADDR'];
}elseif (getenv($_SERVER['REMOTE_ADDR'])){
$cip=getenv($_SERVER['REMOTE_ADDR']);
}
return $cip;
}
/**
* :
*/
public function getSign($Obj)
{
foreach ($Obj as $k => $v)
{
$Parameters[$k] = $v;
}
// :
ksort($Parameters);
$String = $this->formatBizQueryParaMap($Parameters, false);
//echo '【string1】'.$String.'';
// : string KEY 5a02bd8ecxxxxxxxxxxxxc1aae7d199
$String = $String."&key=zgdbjz1234567890weixin1234567890";
//echo "【string2】".$String."";
// :MD5
$String = md5($String);
//echo "【string3】 ".$String."";
// :
$result_ = strtoupper($String);
//echo "【result】 ".$result_."";
return $result_;
}
public function formatBizQueryParaMap($paraMap, $urlencode)
{
// var_dump($paraMap);//die;
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
//$buff .= strtolower($k) . "=" . $v . "&";
$buff .= $k . "=" . $v . "&";
}
$reqPar='';
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}