文檔
注:開放平臺的微信支付和公衆號的微信支付是不同的,公衆平臺和開放平臺的支付申請下來以後會有各自對應的商戶平臺帳號php
function wechat($appid,$mchid,$appkey,$cert_path,$key_path,$order_id,$openid,$amount,$desc){ $arr = [ 'mch_appid'=>$appid,//注意區分公衆號和app商戶號不一樣 'mchid'=>$mchid, 'nonce_str'=>str_random(32),//隨機數 'partner_trade_no'=>$order_id,//本身定義一個不重複訂單號 'openid'=>$openid,//微信openid 經過微信受權登陸獲取 'check_name'=>'NO_CHECK', 'amount'=>$amount*100,//注意這裏傳給微信的單位是分 'desc'=>$desc, 'spbill_create_ip'=>\Request::getClientIp(), 'sign'=>'', ]; ksort($arr); $sign=""; foreach ($arr as $key => $value) { if($value && $key!="sign" && $key!="key"){ $sign.=$key."=".$value."&"; } } $sign.="key=".$appkey;//商戶後臺自定義的 $arr['sign'] = strtoupper(md5($sign)); $xml = "<xml>"; foreach ($arr as $key=>$val) { if (is_numeric($val)) { $xml.="<".$key.">".$val."</".$key.">"; } else $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; } $xml.="</xml>"; $ch = curl_init(); //超時時間 curl_setopt($ch,CURLOPT_TIMEOUT,60); curl_setopt($ch,CURLOPT_URL,'https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers'); curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); //默認格式爲PEM curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLCERT,$cert_path);//注意區分公衆號和app商戶號的證書不一樣,須要到pay.weixin.qq.com後臺下載 curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); curl_setopt($ch,CURLOPT_SSLKEY,$key_path); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); curl_setopt($ch,CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_POSTFIELDS,$xml); $data = curl_exec($ch); $data = json_decode(json_encode(simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA)), true); curl_close($ch); return $data;//$data['return_code'] == 'SUCCESS' && $data['result_code'] == 'SUCCESS' 支付成功 } }
微信上傳文件html
function https_request($url,$type="get",$res="json",$data = ''){ //1.初始化curl $curl = curl_init(); //2.設置curl的參數 curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,2); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); if ($type == "post"){ curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data); } //3.採集 $output = curl_exec($curl); //4.關閉 curl_close($curl); if ($res == 'json') { return json_decode($output,true); } } function getWxAccessToken(){ if ( $_SESSION['access_token'] && $_SESSION['expire_time'] > time() ) { //未過時 return $_SESSION['access_token']; }else { $appid = "個人id"; $appsecret = "個人appsecret "; $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appid."&secret=".$appsecret; $res =$this->https_request($url,'get','json'); $access_token = $res["access_token"]; //將從新獲取到的access_token存到session裏 $_SESSION['access_token']=$access_token; $_SESSION['expire_time']=time()+7200; return $access_token; } } //上傳圖片素材(該方法只能獲取到圖片的URL) function addMaterialUrl() { $access_token = $this->getWxAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$access_token; $filename = '我是圖片'; $data=array("media"=>'@'. $filename); $res=$this->https_request( $url ,'post', 'json', $data); //dump($res); exit(); return $res['url']; } php5.6加上curl_setopt ($curl, CURLOPT_SAFE_UPLOAD, false);或者直接"media" => new CURLFile(realpath($real_path)), https://segmentfault.com/a/1190000000725185
附:
https://youqingkui.me/note/e5...
python版微信支付
http://bblove.me/2015/10/25/w...
微信APP支付服務端php sdk開發教程
https://github.com/fanhefan/w...
微信紅包API接口
http://jeffchen.sinaapp.com/
http://tao.logdown.com/posts/...
微信支付 一步一個坑的APP支付python