教你用PHP开发微信公众号文章付费阅读功能

php开发微信公众号文章付费阅读功能! 如上图,一看就懂,就是一片公众号文章,点进去显示标题,作者,时间,公众号名称和部分内容,要想阅读所有内容,那就支付0.01元就可以阅读所有的...

教你用PHP开发微信公众号文章付费阅读功能插图1

php开发微信公众号文章付费阅读功能!

教你用PHP开发微信公众号文章付费阅读功能插图3

如上图,一看就懂,就是一片公众号文章,点进去显示标题,作者,时间,公众号名称和部分内容,要想阅读所有内容,那就支付0.01元就可以阅读所有的内容,这就是付费阅读!!!当然金额可以自定义....

其实这个开发原理很简单,无非就是在文章页面加一个微信支付的按钮,点击支付后把隐藏的部分给显示出来或者直接跳转到全文地址。

当然了,这个文章界面也是模仿官方来写的,你可以查看官方的样式,然后模仿就可以了,这个没啥难度。主要是加个按钮在这个页面,下面是这个页面的代码:

readpay.php

<?phpheader('Content-type:text/html;Charset=utf-8');$mchid='微信支付商户号';//微信支付商户号$appid='微信支付申请对应的公众号的APPID';//微信支付申请对应的公众号的APPID$appKey='微信支付申请对应的公众号的APPSECRET';//微信支付申请对应的公众号的APPSECRET$apiKey='API密钥';//帐户设置-安全设置-API安全-API密钥-设置API密钥//①、获取用户openid$wxPay=newWxpayService($mchid,$appid,$appKey,$apiKey);$openId=$wxPay->GetOpenid();//获取openidif(!$openId)exit('获取openid失败');//②、统一下单$outTradeNo=uniqid();//你自己的商品订单号$payAmount=0.01;//付款金额,单位:元$orderName='test';//订单标题$notifyUrl='nofity.php';//付款成功后的回调地址,一般放在本页面的同级目录即可$payTime=time();//付款时间$jsApiParameters=$wxPay->createJsBizPackage($openId,$payAmount,$outTradeNo,$orderName,$notifyUrl,$payTime);$jsApiParameters=json_encode($jsApiParameters);?><!--下面就是木方官方微信文章页面--><html><head><metacharset="utf-8"><metaname="viewport"content="width=device-width,initial-scale=1"/><title>新版微信支持双开,王利芬庆祝“茅侃侃去世”文阅读10w+被批人血馒头</title><scripttype="text/javascript">//调用微信JSapi支付functionjsApiCall(){WeixinJSBridge.invoke('getBrandWCPayRequest',<?phpecho$jsApiParameters;?>,function(res){WeixinJSBridge.log(res.err_msg);//alert(res.err_code+res.err_desc+res.err_msg);if(res.err_msg=="get_brand_wcpay_request:ok"){//支付成功跳转页面window.location.href="这里填写支付成功后要跳转的查看全文文章地址";}else{//支付失败/或取消支付跳转页面,自己自定义开发页面window.location.href="false.html";}});}functioncallpay(){if(typeofWeixinJSBridge=="undefined"){if(document.addEventListener){document.addEventListener('WeixinJSBridgeReady',jsApiCall,false);}elseif(document.attachEvent){document.attachEvent('WeixinJSBridgeReady',jsApiCall);document.attachEvent('onWeixinJSBridgeReady',jsApiCall);}}else{jsApiCall();}}</script><!--下面就是木方官方微信文章页面的CSS--><style>#title{margin-bottom:10px;line-height:1.4;font-weight:400;font-size:24px;width:97%;margin:0auto;}#meta_content.time{color:#8C8C8C;font-family:"SimHei";}.author{color:#8C8C8C;font-family:"SimHei";}.name{color:#607fa6;}#con{width:95%;font-size:15px;margin:15pxauto25px;color:#595757;}</style></head><body><br/><!--文章标题--><h2id="title">新版微信支持双开,王利芬庆祝“茅侃侃去世”文阅读10w+被批人血馒头</h2><divid="meta_content"><!--发布时间、作者、公众号昵称--><spanclass="time">2018-01-27</span><spanclass="author">tanking</span><spanclass="name">里客云</span></div><!--显示的部分内容,未支付前显示的内容--><divid="con">这一周,公众号议论最多的有“周冲的影像声色”因洗稿被撕、80后创业者茅侃侃去世、刘亦菲分手......几乎每件事都能在朋友圈刷到相关报道。此外,视频大号“一条”又拿到了新一轮融资,你最关心哪一件事呢?</div><!--支付按钮--><divalign="center"><buttonstyle="width:180px;height:35px;background:none;border-radius:5px;border:1px#1AAD19solid;cursor:pointer;color:#1AAD19;font-size:15px;-webkit-tap-highlight-color:rgba(255,0,0,0);"type="button"οnclick="callpay()">支付0.01阅读全文</button></div></body></html><!--下面是微信支付逻辑了--><?phpheader("Content-Type:text/html;charset=utf-8");classWxpayService{protected$mchid;protected$appid;protected$appKey;protected$apiKey;public$data=null;publicfunction__construct($mchid,$appid,$appKey,$key){$this->mchid=$mchid;//https://pay.weixin.qq.com产品中心-开发配置-商户号$this->appid=$appid;//微信支付申请对应的公众号的APPID$this->appKey=$appKey;//微信支付申请对应的公众号的APPKey$this->apiKey=$key;//https://pay.weixin.qq.com帐户设置-安全设置-API安全-API密钥-设置API密钥}/***通过跳转获取用户的openid,跳转流程如下:*1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize*2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code*@return用户的openid*/publicfunctionGetOpenid(){//通过code获得openidif(!isset($_GET['code'])){//触发微信返回code码$scheme=$_SERVER['HTTPS']=='on'?'https://':'http://';$baseUrl=urlencode($scheme.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].$_SERVER['QUERY_STRING']);$url=$this->__CreateOauthUrlForCode($baseUrl);Header("Location:$url");exit();}else{//获取code码,以获取openid$code=$_GET['code'];$openid=$this->getOpenidFromMp($code);return$openid;}}/***通过code从工作平台获取openid机器access_token*@paramstring$code微信跳转回来带上的code*@returnopenid*/publicfunctionGetOpenidFromMp($code){$url=$this->__CreateOauthUrlForOpenid($code);$res=self::curlGet($url);//取出openid$data=json_decode($res,true);$this->data=$data;$openid=$data['openid'];return$openid;}/***构造获取open和access_toke的url地址*@paramstring$code,微信跳转带回的code*@return请求的url*/privatefunction__CreateOauthUrlForOpenid($code){$urlObj["appid"]=$this->appid;$urlObj["secret"]=$this->appKey;$urlObj["code"]=$code;$urlObj["grant_type"]="authorization_code";$bizString=$this->ToUrlParams($urlObj);return"https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString;}/***构造获取code的url连接*@paramstring$redirectUrl微信服务器回跳的url,需要url编码*@return返回构造好的url*/privatefunction__CreateOauthUrlForCode($redirectUrl){$urlObj["appid"]=$this->appid;$urlObj["redirect_uri"]="$redirectUrl";$urlObj["response_type"]="code";$urlObj["scope"]="snsapi_base";$urlObj["state"]="STATE"."#wechat_redirect";$bizString=$this->ToUrlParams($urlObj);return"https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString;}/***拼接签名字符串*@paramarray$urlObj*@return返回已经拼接好的字符串*/privatefunctionToUrlParams($urlObj){$buff="";foreach($urlObjas$k=>$v){if($k!="sign")$buff.=$k."=".$v."&";}$buff=trim($buff,"&");return$buff;}/***统一下单*@paramstring$openid调用【网页授权获取用户信息】接口获取到用户在该公众号下的Openid*@paramfloat$totalFee收款总费用单位元*@paramstring$outTradeNo唯一的订单号*@paramstring$orderName订单名称*@paramstring$notifyUrl支付结果通知url不要有问号*@paramstring$timestamp支付时间*@returnstring*/publicfunctioncreateJsBizPackage($openid,$totalFee,$outTradeNo,$orderName,$notifyUrl,$timestamp){$config=array('mch_id'=>$this->mchid,'appid'=>$this->appid,'key'=>$this->apiKey,);$orderName=iconv('GBK','UTF-8',$orderName);$unified=array('appid'=>$config['appid'],'attach'=>'pay',//商家数据包,原样返回,如果填写中文,请注意转换为utf-8'body'=>$orderName,'mch_id'=>$config['mch_id'],'nonce_str'=>self::createNonceStr(),'notify_url'=>$notifyUrl,'openid'=>$openid,//rade_type=JSAPI,此参数必传'out_trade_no'=>$outTradeNo,'spbill_create_ip'=>'127.0.0.1','total_fee'=>intval($totalFee*100),//单位转为分'trade_type'=>'JSAPI',);$unified['sign']=self::getSign($unified,$config['key']);$responseXml=self::curlPost('https://api.mch.weixin.qq.com/pay/unifiedorder',self::arrayToXml($unified));$unifiedOrder=simplexml_load_string($responseXml,'SimpleXMLElement',LIBXML_NOCDATA);if($unifiedOrder===false){die('parsexmlerror');}if($unifiedOrder->return_code!='SUCCESS'){die($unifiedOrder->return_msg);}if($unifiedOrder->result_code!='SUCCESS'){die($unifiedOrder->err_code);}$arr=array("appId"=>$config['appid'],"timeStamp"=>"$timestamp",//这里是字符串的时间戳,不是int,所以需加引号"nonceStr"=>self::createNonceStr(),"package"=>"prepay_id=".$unifiedOrder->prepay_id,"signType"=>'MD5',);$arr['paySign']=self::getSign($arr,$config['key']);return$arr;}publicstaticfunctioncurlGet($url='',$options=array()){$ch=curl_init($url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_TIMEOUT,30);if(!empty($options)){curl_setopt_array($ch,$options);}//https请求不验证证书和hostcurl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);$data=curl_exec($ch);curl_close($ch);return$data;}publicstaticfunctioncurlPost($url='',$postData='',$options=array()){if(is_array($postData)){$postData=http_build_query($postData);}$ch=curl_init();curl_setopt($ch,CURLOPT_URL,$url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);curl_setopt($ch,CURLOPT_POST,1);curl_setopt($ch,CURLOPT_POSTFIELDS,$postData);curl_setopt($ch,CURLOPT_TIMEOUT,30);//设置cURL允许执行的最长秒数if(!empty($options)){curl_setopt_array($ch,$options);}//https请求不验证证书和hostcurl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);$data=curl_exec($ch);curl_close($ch);return$data;}publicstaticfunctioncreateNonceStr($length=16){$chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';$str='';for($i=0;$i<$length;$i++){$str.=substr($chars,mt_rand(0,strlen($chars)-1),1);}return$str;}publicstaticfunctionarrayToXml($arr){$xml="<xml>";foreach($arras$key=>$val){if(is_numeric($val)){$xml.="<".$key.">".$val."</".$key.">";}else{$xml.="<".$key."><![CDATA[".$val."]]></".$key.">";}}$xml.="</xml>";return$xml;}publicstaticfunctiongetSign($params,$key){ksort($params,SORT_STRING);$unSignParaString=self::formatQueryParaMap($params,false);$signStr=strtoupper(md5($unSignParaString."&key=".$key));return$signStr;}protectedstaticfunctionformatQueryParaMap($paraMap,$urlEncode=false){$buff="";ksort($paraMap);foreach($paraMapas$k=>$v){if(null!=$v&&"null"!=$v){if($urlEncode){$v=urlencode($v);}$buff.=$k."=".$v."&";}}$reqPar='';if(strlen($buff)>0){$reqPar=substr($buff,0,strlen($buff)-1);}return$reqPar;}}?>

nofity.php

<?php/***原生支付(扫码支付)及公众号支付的异步回调通知*说明:需要在native.php或者jsapi.php中的填写回调地址。例如:http://www.xxx.com/wx/notify.php*付款成功后,微信服务器会将付款结果通知到该页面*/header('Content-type:text/html;Charset=utf-8');$mchid='微信支付商户号';$appid='公众号APPID';$apiKey='API密钥';$wxPay=newWxpayService($mchid,$appid,$apiKey);$result=$wxPay->notify();if($result){//完成你的逻辑//例如连接数据库,获取付款金额$result['cash_fee'],获取订单号$result['out_trade_no'],修改数据库中的订单状态等;}else{echo'payerror';}classWxpayService{protected$mchid;protected$appid;protected$apiKey;publicfunction__construct($mchid,$appid,$key){$this->mchid=$mchid;$this->appid=$appid;$this->apiKey=$key;}publicfunctionnotify(){$config=array('mch_id'=>$this->mchid,'appid'=>$this->appid,'key'=>$this->apiKey,);$postStr=$GLOBALS["HTTP_RAW_POST_DATA"];$postObj=simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA);if($postObj===false){die('parsexmlerror');}if($postObj->return_code!='SUCCESS'){die($postObj->return_msg);}if($postObj->result_code!='SUCCESS'){die($postObj->err_code);}$arr=(array)$postObj;unset($arr['sign']);if(self::getSign($arr,$config['key'])==$postObj->sign){echo'<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';return$arr;}}/***获取签名*/publicstaticfunctiongetSign($params,$key){ksort($params,SORT_STRING);$unSignParaString=self::formatQueryParaMap($params,false);$signStr=strtoupper(md5($unSignParaString."&key=".$key));return$signStr;}protectedstaticfunctionformatQueryParaMap($paraMap,$urlEncode=false){$buff="";ksort($paraMap);foreach($paraMapas$k=>$v){if(null!=$v&&"null"!=$v){if($urlEncode){$v=urlencode($v);}$buff.=$k."=".$v."&";}}$reqPar='';if(strlen($buff)>0){$reqPar=substr($buff,0,strlen($buff)-1);}return$reqPar;}}

简单说明:

1、新建readpay.php,拷贝上面的代码,修改商户号、appid、appsecret、密钥即可,还有下面的回调地址的路径(nofity.php),至于支付成功和支付失败跳转的页面按自己的需求修改即可。

支付金额、文章标题】时间、作者、公账号名称等根据自己的需求修改。

要注意,订单标题不能为中文,否则会提示body参数错误什么的。

2、新建nofity.php

把上面的代码拷贝上去,修改商户号、appid、密钥即可。

上传到支付授权目录,然后访问readpay.php页面测试。

3、新建false.html,这个是支付失败的页面,至于支付失败要显示什么或者输出什么,这个根据你的业务来自定义开发。

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:http://www.chanpinyuan.cn/42673.html;
(0)
上一篇 2023年5月9日 下午4:16
下一篇 2023年5月9日 下午4:16

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部