微信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文档。