第一篇:湖北元潤科技有限公司 微信支付開發(fā) 內(nèi)部
湖北元潤科技有限公司 微信支付開發(fā) 內(nèi)部
更新內(nèi)容:自動獲取openid,只在微信瀏覽器下 獲取openid。到這里大家還不能搞定那實在是沒天賦了。
/**
* 獲取當(dāng)前頁面完整URL地址
*/
functionget_url(){ $sys_protocal= isset($_SERVER['SERVER_PORT'])&&$_SERVER['SERVER_PORT'] == '443'? 'https://': 'http://';$php_self= $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];$path_info= isset($_SERVER['PATH_INFO'])? $_SERVER['PATH_INFO'] : '';$relate_url= isset($_SERVER['REQUEST_URI'])? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING'])? '?'.$_SERVER['QUERY_STRING'] : $path_info);return$sys_protocal.(isset($_SERVER['HTTP_HOST'])? $_SERVER['HTTP_HOST'] : '').$relate_url;}
//include_once(ROOT_PATH.'includes/modules/payment/wxpay.php');
$openid=@$_COOKIE['sopenid'];
if(!$openid&&strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!== false){
//使用jsapi接口
//$jsApi = new JsApi_pub();
if(!isset($_GET['code'])){ //=========步驟1:網(wǎng)頁授權(quán)獲取用戶openid============
//通過code獲得openid
//觸發(fā)微信返回code碼
$backurl= get_url();//$url = $jsApi->createOauthUrlForCode($backurl);$url= “https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=”.urlencode($backurl).“&response_type=code&scope=snsapi_base&state=123#wechat_redirect”;//echo $url;
Header(“Location: $url”);}else { //獲取code碼,以獲取openid
$code= $_GET['code'];
$url= “https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SCRETID&code=”.$code.“&grant_type=authorization_code”;$re= file_get_contents($url);$rearr= json_decode($re,true);$openid= $rearr['openid'];//var_dump($code);
//$jsApi->setCode($code);
//$openid = $jsApi->getOpenid();
setcookie(“sopenid”,$openid,time()+864000,'/');} } //var_dump($openid);
——————————–
沒有研究過ecshop插件,也不知道ecshop插件的制作流程。我就用現(xiàn)有插件修改了一番,讓ecshop手機端支持微信支付。
1.安裝:覆蓋到網(wǎng)站根目錄。注意備份原來的網(wǎng)站
2.配置:后臺開啟微信支付功能,填入相應(yīng)的參數(shù) appi,mchid , key, appsecret,支付通知url,支付成功跳轉(zhuǎn)url 3.說明:
2個back 文件為備份文件不用理會,備份之前需要修改配置文件才可以成功支付,現(xiàn)在只要在后臺安裝配置參數(shù)即可開通微信支付V3。其中 mobileincludes 文件夾下的init.php文件是為了獲取到微信用戶openid,如果你已經(jīng)獲取到openid就不用覆蓋整個文件。然后修改includesmodulespaymentwxpay.php大 概第168行 @$openid=$_COOKIE['sopenid'];改成你得到的openid.4.關(guān)于測試:
目前微世界商城可以正常下單支付。1.需要在微世界服務(wù)號內(nèi)打開商城鏈接。2.需要在公眾號后臺添加支付人員測試白名單。滿足以上兩個條件才可以發(fā)起支付,支付成功后 wxpaydemonotify_url.php 會接受到通知,并改變訂單狀態(tài)。————————-附:獲取當(dāng)前頁面完整URL地址
/**
* 獲取當(dāng)前頁面完整URL地址
*/
functionget_url(){ $sys_protocal= isset($_SERVER['SERVER_PORT'])&&$_SERVER['SERVER_PORT'] == '443'? 'https://': 'http://';$php_self= $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];$path_info= isset($_SERVER['PATH_INFO'])? $_SERVER['PATH_INFO'] : '';$relate_url= isset($_SERVER['REQUEST_URI'])? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING'])? '?'.$_SERVER['QUERY_STRING'] : $path_info);return$sys_protocal.(isset($_SERVER['HTTP_HOST'])? $_SERVER['HTTP_HOST'] : '').$relate_url;}
微信獲取昵稱自動登錄
經(jīng)過反復(fù)幾次驗證,發(fā)現(xiàn)我這個方法有缺陷: 微信內(nèi) 未關(guān)注進入網(wǎng)站,無法獲得昵稱。關(guān)注后用我這個方法可以獲得昵稱。
是否是因為第一次生成openid 所以還未生成昵稱?待測試。
/**
* 獲取當(dāng)前頁面完整URL地址 */
functionget_url(){ $sys_protocal= isset($_SERVER['SERVER_PORT'])&&$_SERVER['SERVER_PORT'] == '443'? 'https://': 'http://';$php_self= $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
$path_info= isset($_SERVER['PATH_INFO'])? $_SERVER['PATH_INFO'] : '';$relate_url= isset($_SERVER['REQUEST_URI'])? $_SERVER['REQUEST_URI'] : $php_self.(isset($_SERVER['QUERY_STRING'])? '?'.$_SERVER['QUERY_STRING'] : $path_info);return$sys_protocal.(isset($_SERVER['HTTP_HOST'])? $_SERVER['HTTP_HOST'] : '').$relate_url;}
$wxch_config= $db-> getRow(“SELECT * FROM `ecs_weixin_config` WHERE `id` = 1”);$appid= $wxch_config['appid'];$appsecret= $wxch_config['appsecret'];
$APPID= $appid;$SCRETID=$appsecret;
if(!$_SESSION['user_id'] &&strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!== false){
if(!isset($_GET['code'])){
$backurl= get_url();//$url = $jsApi->createOauthUrlForCode($backurl);$url= “https://open.weixin.qq.com/connect/oauth2/authorize?appid=”.$APPID.“&redirect_uri=”.urlencode($backurl).“&response_type=code&scope=snsapi_base&state=123#wechat_redirect”;//echo $url;
Header(“Location: $url”);}else { //獲取code碼,以獲取openid $code= $_GET['code'];
$url= “https://api.weixin.qq.com/sns/oauth2/access_token?appid=”.$APPID.“&secret=”.$SCRETID.“&code=”.$code.“&grant_type=authorization_code”;$re= curl_get_contents1($url);$rearr= json_decode($re,true);$openid= $rearr['openid'];
//var_dump($rearr);
//$jsApi->setCode($code);
//$openid = $jsApi->getOpenid();
$user_name= $db->getOne(“select uname from ecs_weixin_user where wxid = '{$openid}'”);
if($openid&&!$user_name){ //注冊進入
$passw= md5('shanmao.me'.rand(1,***));$wxch_user_sql= “INSERT INTO `ecs_weixin_user`(`wxid`,`setp`)VALUES('$openid','3')”;$db-> query($wxch_user_sql);$ecs_user_id= $db-> insert_id();if($ecs_user_id<=0){ exit('error get insert_id');} $url3= “https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=”.$APPID.“&secret=”.$SCRETID;$re3= curl_get_contents1($url3);$re3arr= json_decode($re3,true);$token= $re3arr['access_token'];$url2= “https://api.weixin.qq.com/cgi-bin/user/info?access_token=”.$token.“&openid=”.$openid.“&lang=zh_CN”;$re2= curl_get_contents1($url2);$rearr2= json_decode($re2,true);
$uc_username= $rearr2['nickname']?$rearr2['nickname']: 'doubag'.$ecs_user_id;$time= gmtime();$user_sql= “INSERT INTO `ecs_users`(`user_name`,`password`,`reg_time`)VALUES('$uc_username','$passw','$time')”;$db-> query($user_sql);$uc_update= “UPDATE ecs_weixin_user SET `uname` = '$uc_username' WHERE `uid` = '$ecs_user_id'”;$db-> query($uc_update);$user->set_session($uc_username);$user->set_cookie($uc_username,1);update_user_info();/*
$up_uid = get_affiliate();if($up_uid>0){
$sql = 'UPDATE ecs_users SET parent_id = '.$up_uid.' WHERE user_id = '.$ecs_user_id;$db->query($sql);
header('Location: user.php?newuser=1');}*/
}else{ $user->set_session($user_name);$user->set_cookie($user_name,1);update_user_info();}
//setcookie(“sopenid”,$openid,time()+864000,'/');} } //var_dump($openid);
functioncurl_get_contents1($url){ $ch= curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_TIMEOUT, 2);curl_setopt($ch, CURLOPT_USERAGENT, “IE 6.0”);curl_setopt($ch, CURLOPT_REFERER, "");curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);$r= curl_exec($ch);curl_close($ch);return$r;}
第二篇:微信服務(wù)號 微信支付開發(fā)
微信服務(wù)號 微信支付開發(fā)
1.發(fā)起支付,都是通過h5發(fā)起的,首先獲取prepay_id
發(fā)起支付,需要統(tǒng)一下單的prepay_id
SortedMap
parameters.put(“appid”, ConfigUtil.APPID);
parameters.put(“mch_id”, ConfigUtil.MCH_ID);
parameters.put(“nonce_str”, PayCommonUtil.CreateNoncestr());
parameters.put(“body”, bodyorder);
parameters.put(“out_trade_no”, outTradeNo);// 用戶訂單號
parameters.put(“total_fee”, totalfee);// 標(biāo)價金額(分)
// parameters.put(“spbill_create_ip”,IpAddressUtil.getIpAddr(request));
parameters.put(“spbill_create_ip”, “192.168.1.1”);// 電腦測試
// parameters.put(“spbill_create_ip”,NetworkUtil.getIpAddress(request));
parameters.put(“notify_url”, ConfigUtil.NOTIFY_URL);
parameters.put(“trade_type”, “JSAPI”);
parameters.put(“openid”, openId);
String sign = PayCommonUtil.createSign(“UTF-8”, parameters);
parameters.put(“sign”, sign);
String requestXML = PayCommonUtil.getRequestXml(parameters);
String result = CommonUtil.httpsRequestR2s(ConfigUtil.UNIFIED_ORDER_URL, “POST”, requestXML);
System.out.println(“第一彈數(shù)據(jù)” + result + “ip地址” + NetworkUtil.getIpAddress(request));
數(shù)據(jù)為
第一彈數(shù)據(jù)
2.拿到prepay_id后,就可以發(fā)起支付
支付,需要設(shè)置測試路徑和真實路徑,發(fā)起支付,將參數(shù)轉(zhuǎn)為json,在放到respond里,然后h5頁面從request里取
SortedMap
params.put(“appId”, ConfigUtil.APPID);
params.put(“timeStamp”, Long.toString(new Date().getTime()));
params.put(“nonceStr”, PayCommonUtil.CreateNoncestr());
System.out.println(“訂單id” + map.get(“prepay_id”));
params.put(“package”, “prepay_id=” + map.get(“prepay_id”));
params.put(“signType”, ConfigUtil.SIGN_TYPE);
String paySign = PayCommonUtil.createSign(“UTF-8”, params);
// params.put(“packageValue”, “prepay_id=”+map.get(“prepay_id”));
// //這里用packageValue是預(yù)防package是關(guān)鍵字在js獲取值出錯
params.put(“paySign”, paySign);// paySign的生成規(guī)則和Sign的生成規(guī)則一致
String json = JSONObject.fromObject(params).toString();
System.out.println(“第二彈數(shù)據(jù)” + json);
try {
response.setContentType(“text/html” + “;charset=UTF-8”);
response.setHeader(“Pragma”, “No-cache”);
response.setHeader(“Cache-Control”, “no-cache”);
response.setDateHeader(“Expires”, 0);
response.getWriter().write(json);
response.getWriter().flush();
} catch(IOException e){
e.printStackTrace();
} }
上傳,支付的html頁面
蘇牌皮草
庫存18件
原價:8888元
現(xiàn)價:5000


文檔為doc格式
聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。