微信sdkphp
⑴ thinkphp微信h5支付sdk怎麼用
主要的支付代碼如下:
<?php
namespaceHomeController;
useThinkController;
//微信支付類
{
//獲取access_token過程中的跳轉uri,通過跳轉將code傳入jsapi支付頁面
publicfunctionjs_api_call(){
$order_sn=I('get.order_sn','');
if(empty($order_sn)){
header('location:'.__ROOT__.'/');
}
vendor('Weixinpay.WxPayPubHelper');
//使用jsapi介面
$jsApi=newJsApi_pub();
//=========步驟1:網頁授權獲取用戶openid============
//通過code獲得openid
if(!isset($_GET['code'])){
//觸發微信返回code碼
$url=$jsApi->createOauthUrlForCode('域名/Wxpay/js_api_call?order_sn='.$order_sn);
//$url=$jsApi->createOauthUrlForCode(WxPayConf_pub::JS_API_CALL_URL);
Header("Location:$url");
}else{
//獲取code碼,以獲取openid
$code=$_GET['code'];
$jsApi->setCode($code);
$openid=$jsApi->getOpenId();
}
$res=array(
'order_sn'=>'20150109113322',
'order_amount'=>255
);
//=========步驟2:使用統一支付介面,獲取prepay_id============
//使用統一支付介面
$unifiedOrder=newUnifiedOrder_pub();
//設置統一支付介面參數
//設置必填參數
//appid已填,商戶無需重復填寫
//mch_id已填,商戶無需重復填寫
//noncestr已填,商戶無需重復填寫
//spbill_create_ip已填,商戶無需重復填寫
//sign已填,商戶無需重復填寫
$total_fee=$res['order_amount']*100;
//$total_fee=1;
$body="訂單支付{$res['order_sn']}";
$unifiedOrder->setParameter("openid","$openid");//用戶標識
$unifiedOrder->setParameter("body",$body);//商品描述
//自定義訂單號,此處僅作舉例
$out_trade_no=$res['order_sn'];
$unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商戶訂單號
$unifiedOrder->setParameter("total_fee",$total_fee);//總金額
//$unifiedOrder->setParameter("attach","order_sn={$res['order_sn']}");//附加數據
$unifiedOrder->setParameter("notify_url",WxPayConf_pub::NOTIFY_URL);//通知地址
$unifiedOrder->setParameter("trade_type","JSAPI");//交易類型
//非必填參數,商戶可根據實際情況選填
//$unifiedOrder->setParameter("sub_mch_id","XXXX");//子商戶號
//$unifiedOrder->setParameter("device_info","XXXX");//設備號
//$unifiedOrder->setParameter("attach","XXXX");//附加數據
//$unifiedOrder->setParameter("time_start","XXXX");//交易起始時間
//$unifiedOrder->setParameter("time_expire","XXXX");//交易結束時間
//$unifiedOrder->setParameter("goods_tag","XXXX");//商品標記
//$unifiedOrder->setParameter("openid","XXXX");//用戶標識
//$unifiedOrder->setParameter("proct_id","XXXX");//商品ID
$prepay_id=$unifiedOrder->getPrepayId();
//=========步驟3:使用jsapi調起支付============
$jsApi->setPrepayId($prepay_id);
$jsApiParameters=$jsApi->getParameters();
$wxconf=json_decode($jsApiParameters,true);
if($wxconf['package']=='prepay_id='){
$this->error('當前訂單存在異常,不能使用支付');
}
$this->assign('res',$res);
$this->assign('jsApiParameters',$jsApiParameters);
$this->display('jsapi');
}
//非同步通知url,商戶根據實際開發過程設定
publicfunctionnotify_url(){
vendor('Weixinpay.WxPayPubHelper');
//使用通用通知介面
$notify=newNotify_pub();
//存儲微信的回調
$xml=$GLOBALS['HTTP_RAW_POST_DATA'];
$notify->saveData($xml);
//驗證簽名,並回應微信。
//對後台通知交互時,如果微信收到商戶的應答不是成功或超時,微信認為通知失敗,
//微信會通過一定的策略(如30分鍾共8次)定期重新發起通知,
//盡可能提高通知的成功率,但微信不保證通知最終能成功。
if($notify->checkSign()==FALSE){
$notify->setReturnParameter("return_code","FAIL");//返回狀態碼
$notify->setReturnParameter("return_msg","簽名失敗");//返回信息
}else{
$notify->setReturnParameter("return_code","SUCCESS");//設置返回碼
}
$returnXml=$notify->returnXml();
//==商戶根據實際情況設置相應的處理流程,此處僅作舉例=======
//以log文件形式記錄回調信息
//$log_name="notify_url.log";//log文件路徑
//$this->log_result($log_name,"【接收到的notify通知】: ".$xml." ");
$parameter=$notify->xmlToArray($xml);
//$this->log_result($log_name,"【接收到的notify通知】: ".$parameter." ");
if($notify->checkSign()==TRUE){
if($notify->data["return_code"]=="FAIL"){
//此處應該更新一下訂單狀態,商戶自行增刪操作
//$this->log_result($log_name,"【通信出錯】: ".$xml." ");
//更新訂單數據【通信出錯】設為無效訂單
echo'error';
}
elseif($notify->data["result_code"]=="FAIL"){
//此處應該更新一下訂單狀態,商戶自行增刪操作
//$this->log_result($log_name,"【業務出錯】: ".$xml." ");
//更新訂單數據【通信出錯】設為無效訂單
echo'error';
}
else{
//$this->log_result($log_name,"【支付成功】: ".$xml." ");
//我這里用到一個process方法,成功返回數據後處理,返回地數據具體可以參考微信的文檔
if($this->process($parameter)){
//處理成功後輸出success,微信就不會再下發請求了
echo'success';
}else{
//沒有處理成功,微信會間隔的發送請求
echo'error';
}
}
}
}
//訂單處理
privatefunctionprocess($parameter){
//此處應該更新一下訂單狀態,商戶自行增刪操作
/*
*返回的數據最少有以下幾個
*$parameter=array(
'out_trade_no'=>xxx,//商戶訂單號
'total_fee'=>XXXX,//支付金額
'openid'=>XXxxx,//付款的用戶ID
);
*/
returntrue;
}
}
?>
⑵ 如何使用微信sdk java版
1.首先我們新建一個Java開發包WeiXinSDK
2.包路徑:com.ansitech.weixin.sdk
測試的前提條件:
假如我的公眾賬號微信號為:vzhanqun
我的伺服器地址為:http://www.vzhanqun.com/
下面我們需要新建一個URL的請求地址
我們新建一個Servlet來驗證URL的真實性,具體介面參考
http://mp.weixin.qq.com/wiki/index.php?title=接入指南
3.新建com.ansitech.weixin.sdk.WeixinUrlFilter.java
這里我們主要是獲取微信伺服器法師的驗證信息,具體驗證代碼如下
[java] view plain print?
package com.ansitech.weixin.sdk;
import com.ansitech.weixin.sdk.util.SHA1;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class WeixinUrlFilter implements Filter {
//這個Token是給微信開發者接入時填的
//可以是任意英文字母或數字,長度為3-32字元
private static String Token = "vzhanqun1234567890";
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("WeixinUrlFilter啟動成功!");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//微信伺服器將發送GET請求到填寫的URL上,這里需要判定是否為GET請求
boolean isGet = request.getMethod().toLowerCase().equals("get");
System.out.println("獲得微信請求:" + request.getMethod() + " 方式");
if (isGet) {
//驗證URL真實性
String signature = request.getParameter("signature");// 微信加密簽名
String timestamp = request.getParameter("timestamp");// 時間戳
String nonce = request.getParameter("nonce");// 隨機數
String echostr = request.getParameter("echostr");//隨機字元串
List<String> params = new ArrayList<String>();
params.add(Token);
params.add(timestamp);
params.add(nonce);
//1. 將token、timestamp、nonce三個參數進行字典序排序
Collections.sort(params, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
//2. 將三個參數字元串拼接成一個字元串進行sha1加密
String temp = SHA1.encode(params.get(0) + params.get(1) + params.get(2));
if (temp.equals(signature)) {
response.getWriter().write(echostr);
}
} else {
//處理接收消息
}
}
@Override
public void destroy() {
}
}
好了,不過這里有個SHA1演算法,我這里也把SHA1演算法的源碼給貼出來吧!
4.新建com.ansitech.weixin.sdk.util.SHA1.java
[java] view plain print?
/*
* 微信公眾平台(JAVA) SDK
*
* Copyright (c) 2014, Ansitech Network Technology Co.,Ltd All rights reserved.
* http://www.ansitech.com/weixin/sdk/
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.ansitech.weixin.sdk.util;
import java.security.MessageDigest;
/**
* <p>Title: SHA1演算法</p>
*
* @author qsyang<[email protected]>
*/
public final class SHA1 {
private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
'6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
/**
* Takes the raw bytes from the digest and formats them correct.
*
* @param bytes the raw bytes from the digest.
* @return the formatted bytes.
*/
private static String getFormattedText(byte[] bytes) {
int len = bytes.length;
StringBuilder buf = new StringBuilder(len * 2);
// 把密文轉換成十六進制的字元串形式
for (int j = 0; j < len; j++) {
buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
}
return buf.toString();
}
public static String encode(String str) {
if (str == null) {
return null;
}
try {
MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
messageDigest.update(str.getBytes());
return getFormattedText(messageDigest.digest());
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
5.把這個Servlet配置到web.xml中
[html] view plain print?
<filter>
<description>微信消息接入介面</description>
<filter-name>WeixinUrlFilter</filter-name>
<filter-class>com.ansitech.weixin.sdk.WeixinUrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>WeixinUrlFilter</filter-name>
<url-pattern>/api/vzhanqun</url-pattern>
</filter-mapping>
好了,接入的開發代碼已經完成。
6.下面就把地址URL和密鑰Token填入到微信申請成為開發者模式中吧。
⑶ 接入微信開發時php實例怎麼配置
第一步需要指定接收微信伺服器數據的URL,同時還需要指定一個TOKEN(由開發者任意填寫,用於生成簽名),用於接入時的驗證。
第二步要驗證您指定的URL的有效性,微信伺服器會像您指定的URL發送一個GET請求,該請求攜帶四個參數。
開發者通過檢驗signature對請求進行校驗。若確認此次GET請求來自微信伺服器,請原樣返回echostr參數內容,則接入生效,成為開發者成功,否則接入失敗。
PHP檢驗代碼如下。
<?php
$wechatObj = new wechatCallbackAPI();
$wechatObj->valid();
class wechatCallbackAPI {
private $token = "WEIXIN";
private $appId = "APPID";
private $appSecret = "APPSECRET";
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$tmpArr = array($this->token, $timestamp, $nonce); 你看過後很簡單吧以後不會可以向我一樣經常到後盾人平台找找相關教材看看就會了,希望能幫到你,給個採納吧謝謝ヾ(◍ ° ㉨ ° ◍)ノ゙
⑷ 使用thinkphp中微信sdk,如何確定用戶發送的文本是什麼
只返回匹配到的數據就可以了。其實這就是個搜索功能,換湯不換葯而已。
⑸ 微信PHP SDK進行了更新,更新代碼如何使用。
一、寫好介面程序
在你的伺服器上上傳好一個介面程序文件 內容如下:
<?php
define("TOKEN", "weixin");//自己定義的token 就是個通信的私鑰
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
//$wechatObj->responseMsg();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[%s]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>0<FuncFlag>
</xml>";
if(!empty( $keyword ))
{
$msgType = "text";
$contentStr = '你好啊.;
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo '說說話吧';
}
}else {
echo '說說話吧';
exit;
}
}
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token =TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
⑹ 微信是不是只提供了php和js的sdk
沒有官方版本。
在Github上有一個正在維護的非官方版本wechat-python-sdk。其實就是把微信的API包裝一下,使用起來應該沒問題。
⑺ 微信開發的jssdk,php怎麼用
不是有例子嗎,你下載下來之後要用哪個介面可以相應的調用啊,不過你自己網站頁面要把相應的介面寫進去(這個在你下載的一個php文件裡面就有),不會的話把官方那一塊都直接粘貼進去,還有你公眾號得有相應的介面許可權,不會開發的話硪可以提供技術支持
⑻ 微信公眾平台的jssdk.php起的什麼作用
那個jssdk.php就是你在php裡面要獲取用戶信息的頁面,那個可以直接調用用的,很方便。微信裡面好多都是用PHP做案例的。
⑼ Thinkphp3.2,微信SDK導入後,在微信開發者後台一直都是token驗證失敗
文件名的.class不能去掉啊
⑽ 微信支付php sdk怎麼使用
它裡面集成了微信支付的很多功能函數。
你只需要直接調用這個介面即可,
如果能看的明白代碼,你也可以自己根據自己的喜歡封裝成類。
具體的用法只能去找api文檔。