2016-01-07 19:05:50 hoho_12 阅读数 500
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒
<?php
/**
  * wechat php test
  */

//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
//$wechatObj->valid();
$wechatObj->responseMsg();

class wechatCallbackapiTest
{
	public function valid()
    {
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
        	echo $echoStr;
        	exit;
        }
    }

    public function responseMsg()
    {
		//get post data, May be due to the different environments
		$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

      	//extract post data
		if (!empty($postStr)){
                /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
                   the best way is to check the validity of xml by yourself */
                libxml_disable_entity_loader(true);
              	$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
                $fromUsername = $postObj->FromUserName;
                $toUsername = $postObj->ToUserName;
                $keyword = trim($postObj->Content);
                $time = time();
            
             	$type=$postObj->MsgType;
				$customevent=$postObj->Event;
            
                $latitude=$postObj->Location_X;
			    $longitude=$postObj->Location_Y;
            
                $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($type=="location"){
                $contentStr="你的纬度是($latitude),经度是($longitude),我已经锁定!";
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }  
            
               
           
            
            //关键字回复
            	if(!empty( $keyword ))
                {
              		$msgType = "text";
                    if($keyword=="1") {                       
                        $contentStr = "感谢关注泛IT!";}
                    if($keyword=="2") {
                        $contentStr = "联系QQ:,欢迎投稿以及提出宝贵意见";}
                    if($keyword=="3") {                       
                        $contentStr = "你的图片不错,还是输入文字吧!";}
                	$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }else{
                	echo "Input something...";
                }
            
             
            //关注公众号后回复
               if($type="event" and $customevent="subscribe"){
                $contentStr="感谢关注泛IT\n您可以分别回复1、2、3";
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }
            
             
             //图片回复
                if($type="image"){
                $contentStr="你的图片很棒!";
                $msgType = "text";
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                	echo $resultStr;
                }  
//switch语句优化
<pre name="code" class="php"> /*
            		switch($type)
				{    
                        //处理文本
                        case "text":
                        //关键字回复
                        if(!empty( $keyword ))
                        {
                             //$msgType = "text";
                            if($keyword=="1") {                       
                            $contentStr = "回复1查看使用说明\n回复2查看联系方式\n回复3使用翻译字典\n回复4使用机器人聊天功能";}
                            if($keyword=="2") {
                            $contentStr = "联系QQ:,欢迎投稿以及提出宝贵意见";}
                         }else{                	
							$contentStr="此项功能尚未开发"; }                        
						break; 
                        //处理图片信息
                         case "image":
					$contentStr="你的图片不错,还是输入文字吧";
                        break;
                        //处理位置信息
                         case "location":
					$contentStr="你的纬度是($latitude),经度是($longitude),我已经锁定!";
					break;
                        //处理关注事件
                         case "event":
					if($customevent=="subscribe")
					{$contentStr="感谢关注泛IT\n回复1查看使用说明";}
					break;
                            default:
							$contentStr="此项功能尚未开发";						                       
                    }
            			$msgType = "text";
                        $resultStr=sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr);
						echo $resultStr;                      
                        */

}else { echo ""; exit; }
 }
 private function checkSignature()
{ // you must define TOKEN by yourself if (!defined("TOKEN")) { throw new Exception('TOKEN is not defined!'); } $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN;$tmpArr = array($token, $timestamp, $nonce); // use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}?>




2015-06-13 11:36:54 wyx100 阅读数 2048
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

微信开发必备工具下载地址:

http://download.csdn.net/detail/wyx100/8801941

工具:

xmlmarker_1_1_setup     xml文件转换工具

sqldeveloper                       数据库工具

portecle-1.7      portecle 可视化的 keytool工具

Notepad_6.7.9                  编程平台

KeyTool_GUI_1.6 工具和教程              key处理软件

jad v1.5.8g                                               java类,反编译软件

eclipse 官网:http://www.eclipse.org/downloads/

 

 

 

2018-12-11 19:18:49 qq_25691983 阅读数 41
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

今天在做微信开发的时候,遇到个编码的坑;最终发现,在微信公众号服务配置的时候《消息加密方式》选择是《兼容模式》。导致返回的XML数据是ASCII编码的。而且用PHP的编码转换也一直不成功。最终在“基本设置----服务器配置—加密方式”加密方式改为《明文模式》后,解决问题!!

2018-01-19 15:02:09 u014559227 阅读数 2593
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

标题

最近做开发的时候碰到了这个问题,甲方希望用户在微信端的录音能够一直有效。就是随时打开好友的分享就能听到好友的录音。可在微信官方开发手册上查到微信录音文件上传后只能在微信端保留3天时间,3天后就失效了。怎么办呢?
1、通过调用微信媒体资源下载接口将微信录音下载到本地

@params
String access_token 微信公众号access_token
String serverId 通过录音上传接口获取到的serverId
http://file.api.weixin.qq.com/cgi-bin/media/get?access_token={$access_token}&media_id={$serverId}

2、从微信方下载到本地的录音文件格式是amr,而微信网页浏览器并不支持amr文件的音频文件播放。所以我们需要将amr 转换成
网页能够识别的mp3格式
怎么转换呢?我找到了一个平台可以支持这种转换,七牛云存储平台.通过七牛云存储我们可以将amr转换成mp3


require("./extension/autoload.php");//官方开发包 可在官方下载 php版本 载入其中的autoload.php extension 是随意 起的名字

/**
 * @param
 * String $filepa 本地amr文件路径
 * @return
 * String 解析后存储在七牛存储空间中的mp3远程地址
 */
function upchange($filepa){
    $accessKey="七牛accessKey 在七牛后台获取";
    $secretKey="七牛secretKey 在七牛后台获取";
    $httpUrl  ="七牛分配的访问地址 在七牛后台获取";
    $bucket = "存储空间对象bucket 在七牛后台创建";
    //转码时使用的队列名称
    $pipeline = '转码队列名称 在七牛后台创建';
    $auth = new \Qiniu\Auth($accessKey, $secretKey);
    $rand_name = getRandChar__(6).time().'.mp3';
    //要进行转码的转码操作
    $fops = "avthumb/mp3/ab/64k/ar/22050";
    //$fops = "mp3";
    //可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当间
    $savekey = Qiniu\base64_urlSafeEncode('kepei:'.$rand_name);
    $fops = $fops.'|saveas/'.$savekey;

    $policy = array(
        'persistentOps'      => $fops,
        'persistentNotifyUrl' => 'http://',
    );
    $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);

    //上传文件的本地路径
    $filePath = $filepa;
    $key = $rand_name;
    //$key = '';
    $uploadMgr = new \Qiniu\Storage\UploadManager(); 
    list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);

    if ($err !== null) {
        return false;
    } else {
        return $httpUrl.$rand_name;
    }
}

function getRandChar__($length){
    $str = null;
    $strPol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
    $max = strlen($strPol)-1;
    for($i=0;$i<$length;$i++){
        $str.=$strPol[rand(0,$max)];//rand($min,$max)生成介于min和max两个数之间的一个随机整数
    }
    return $str;
}

$amrToMp3 = upchange('本地amr文件路径');
//mp3 在七牛上的访问地址
var_dump($amrToMp3);
/**
 * 如果你希望将这个mp3 存储在本地而不是在七牛上,那么你需要在程序上等待几秒,因为这时七牛在转换改amr的格式
 */
 sleep(10);
$res = curlHttp($amrToMp3);        //curlHttp 就是 php    curl 机制 不懂的可以看下我下面文章机制
$open = fopen('demo.mp3','w');
fwrite($open,$res);
fclose($open);

php curlHttp

2016-06-24 16:54:15 xiebuqing 阅读数 340
  • 微信支付开发-微信公众号开发12-微信开发php

    微信公众平台开发之微信支付开发是子恒老师《微信公众平台开发》视频教程的第12部。详细讲解了用php进行微信支付的开发。内容包含获取支付密钥,微信公众号支付开发,扫码支付,微信刷卡支付,异步处理支付结果等等。欢迎反馈,微信/QQ:68183131

    27799 人正在学习 去看看 秦子恒

一、准备工作

1、  申请公众号:订阅号/服务号;(如果是订阅号是拿不到用户的openid的,也就无法通过openid做限制、做记录等)

2、  与微信做对接的接口所在的服务器域名,必须备过案;

3、  拿到微信公众号的appid,appSercet,

例如:
appid: wx83a553ef58d70f11

appSercet :87ae596d3aab2f0bf090233adc9fd43b

 

二、后端开发工作

1、获取微信access_token

//获取微信access_token

private function getAccessToken()

{

       //缓存

        $data = S('weixin_access_token');

        if (empty($data)) {

            $appId     =  C('weixin_appId');

            $appSecret = C('weixin_appSecret');

            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";

            $res =json_decode($this->httpGet($url),true);

            $access_token = $res['access_token'];

            S('weixin_access_token',$access_token,7000);

        } else {

            $access_token = $data;

        }

        return $access_token;

}

 

// 如果是企业号用以下URL获取access_token

// $url ="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";

 

 

2、获取微信jsapi_ticket

 

//获取微信jsapi_ticket

private function getJsApiTicket()

{

        //缓存

        $data = S('weixin_jsapi_ticket');

        if (empty($data)) {

            $accessToken =$this->getAccessToken();

            // 如果是企业号用以下 URL获取 ticket

            // $url ="https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";

            $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

            $res = json_decode($this->httpGet($url),true);

            $ticket = $res['ticket'];

            S('weixin_jsapi_ticket',$ticket,7000);

        } else {

            $ticket = $data;

        }

        return $ticket;

}

 

3、 生成签名

//微信JS签名

   protected function getSignPackage() {

 

        $jsapiTicket =$this->getJsApiTicket();

        // 注意 URL一定要动态获取,不能写死

        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !=='off' || $_SERVER['SERVER_PORT'] == 443) ?"https://" :"http://";

        $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

        $timestamp = time();

        $nonceStr = $this->createNonceStr();

 

        // 这里参数的顺序要按照 key ASCII 码升序排序

        $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";

        $signature = sha1($string);

        $signPackage = array(

            "appId"     => C('weixin_appId'),

            "nonceStr"  => $nonceStr,

            "timestamp" => $timestamp,

            "url"       => $url,

            "signature" => $signature

        );

        return $signPackage;

}

 

三、前端开发工作

1、引入微信开发js文件

<scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.0.0.js?v=3"></script>

 

2、对接微信

//下面是微信接口的初始化

 

function config(appId, timestamp, nonceStr, signature, title, desc, linkUrl,imgUrl, successUrl)

   /*

     * 注意:

     * 1. 所有的JS接口只能在公众号绑定的域名下调用,公众号开发者需要先登录微信公众平台进入"公众号设置""功能设置"里填写"JS接口安全域名"

     * 2. 如果发现在 Android不能分享自定义内容,请到官网下载最新的包覆盖安装,Android自定义分享接口需升级至 6.0.2.58版本及以上。

     * 3. 常见问题及完整 JS-SDK文档地址:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

     *

     * 开发中遇到问题详见文档"附录5-常见错误及解决办法"解决,如仍未能解决可通过以下渠道反馈:

     * 邮箱地址:weixin-open@qq.com

     * 邮件主题:【微信JS-SDK反馈】具体问题

     * 邮件内容说明:用简明的语言描述问题所在,并交代清楚遇到该问题的场景,可附上截屏图片,微信团队会尽快处理你的反馈。

     */

   // alert(signature);

   wx.config({

        debug: false,

        appId:     appId,

        timestamp: timestamp,

        nonceStr:  nonceStr,

        signature: signature,

        jsApiList: [

         // 所有要调用的 API都要加到这个列表中

         'onMenuShareTimeline',

         'onMenuShareAppMessage',

         'onMenuShareQQ',

         'onMenuShareWeibo',

        ]

   });

 

   wx.ready(function () {

        // 在这里调用 API

        wx.onMenuShareTimeline({

            title: title, // 分享标题

         desc:desc, // 分享描述

            link: linkUrl, // 分享链接

            imgUrl: imgUrl, // 分享图标

            success: function () {

             $.ajax({

                url:"/Nxj/choujiang",

                dataType:'json',

                type:'post',

                success:function(ret){

                   if(parseInt(ret.status) ==1)

                   {

                       if(parseInt(ret.type) ==1)

                       {

                          //礼包码

                          $("#lb").find("span").html(ret.giftcode);

                          $("#lb").show();

                       }else{

                          //实物奖

                          $("#st").show();

                       }

                   }else{

                       $("#msg").find(".tips").html(ret.info);

                       $("#msg").show();

                   }

                }

             });

            },

 

            cancel: function () {

            }

        });

 

        wx.onMenuShareAppMessage({

            title: title, // 分享标题

            desc: desc, // 分享描述

            link: linkUrl, // 分享链接

            imgUrl: imgUrl, // 分享图标

            type: 'link', // 分享类型,musicvideolink,不填默认为link

            dataUrl: '', // 如果typemusicvideo,则要提供数据链接,默认为空

            success: function () {

                // 用户确认分享后执行的回调函数

            location.href=successUrl;

            },

 

            cancel: function () {

                // 用户取消分享后执行的回调函数

            }

        });

 

       // 分享到QQ

 

           wx.onMenuShareQQ({

            title:title, // 分享标题

            desc:desc, // 分享描述

            link:linkUrl, // 分享链接

            imgUrl:imgUrl, // 分享图标

            success:function() {

               // 用户确认分享后执行的回调函数

                location.href=successUrl;

            },

 

            cancel:function() {

               // 用户取消分享后执行的回调函数

            }

         });

           // 分享到腾讯微博

 

           wx.onMenuShareWeibo({

            title:title, // 分享标题

            desc:desc, // 分享描述

            link:linkUrl, // 分享链接

            imgUrl:imgUrl, // 分享图标

            success:function() {

               // 用户确认分享后执行的回调函数

                 location.href=successUrl;

            },

            cancel:function() {

                // 用户取消分享后执行的回调函数

            }

         });

   });

   wx.error(function(res){

        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开configdebug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

   });

}

 

 

四、服务号获取openid(订阅号无法获取)

1、获取openid

$url2 = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid='. $appid . '&secret=' . $appSecret . '&code=' . $code .'&grant_type=authorization_code';

 

2、获取用户的信息(openid、nickname、headimgurl等)

$url3 ='https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token .'&openid=' . $openid . '&lang=zh_CN';

 

 

微信开发一

阅读数 177

微信开发入门指南

阅读数 723

没有更多推荐了,返回首页