ThinkPHP框架整合微信支付之Native

正文实例陈说了ThinkPHP框架整合微信支付之JSAPI形式。分享给我们供我们参考,具体如下:

本文实例汇报了ThinkPHP框架整合Wechat支付之Native 扫码支付方式风姿浪漫。分享给我们供大家参谋,具体如下:

脚下Wechat是很流行的,Wechat支付方今超少在英特网能观察风流潇洒俯拾都已经详细的demo,由此,花一点小时来做一下关于Wechat支付种类教程,

大家好,那篇作品是继Wechat支付jsapi篇之后的Wechat支付类别教程第二篇:扫码支付之形式一介绍下扫码支付最近有二种情势,格局生机勃勃比情势二微微复杂点,至于情势生龙活虎与方式二的具体内容,流程,Wechat支付文书档案都有详尽介绍,这里就相当的少说废话,接下去赶紧上教程!

这一次教程是JSAPI格局支付,其余的还有只怕会三番五次写下去

率先大家依然长久以来,导入Wechat支付的类库:

率先,下载Wechat支付的demo,大家遵照微信上的demo来组成到TP中。

接下去是Public下的文书:

介绍下我们这里须求动用的多少个文本:

那边的布局跟JSAPI支付相近,没有需求转移

js_api_call.php:提供了Wechatjsapi的第一职能log_.php:提供打字与印刷日志功用notify_url.php:异步通知作用notify_url.log:异步公告日志qrcode.js:生成二维码js插件

实际有关文件介绍请参谋JSAPI支付,这里就不再表明了 链接地址://www.jb51.net/article/159351.htm

接下去介绍下WxPayPubHelper文件夹下的文书:

接下去直接看调整器部分的代码:

cacert 文件夹是寄存Wechat证书的(PS:具体我还未怎么用证件,尽管下载下来了,证书请在Wechat商行平台上下载卡塔 尔(阿拉伯语:قطر‎SDKRuntimeException.php:那一个正是管理非常的、WxPay.pub.config.php:这么些是做一些布署的,稍后会详细讲授WxPayPubHelper.php:那一个实际上正是Wechat支付的工具类,对于初读书人只要知道怎么用他中间的措施就够了

step1:相仿,先初叶化引进WxPayPubHelper类库

OK,精晓了Wechat官方提供的文本,大家就能够带头整合到TP中了,废话非常少说,那就起来!

/***初始化*/publicfunction_initialize(){//引入WxPayPubHelpervendor('WxPayPubHelper.WxPayPubHelper');}

step1:将demo中的WxPayPubHelper整个文件夹都复制到TP的Vendor目录下,像本身如此:

step2:显示扫码页面需求先生存二维码链接

step2:配置WxPay.pub.config.php文件:

publicfunctionnative_pay(){//设置静态链接$nativeLink=newNativeLink_pub();//设置静态链接参数//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//time_stamp已填,商户无需重复填写//sign已填,商户无需重复填写$product_id=C('WxPayConf_pub.APPID')."static";//自定义商品id$nativeLink->setParameter("product_id",$product_id);//商品id//获取链接$product_url=$nativeLink->getUrl();//使用短链接转换接口$shortUrl=newShortUrl_pub();//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//sign已填,商户无需重复填写$shortUrl->setParameter("long_url",$product_url);//URL链接//获取短链接$codeUrl=$shortUrl->getShortUrl();$this->assign('product_url',$product_url);$this->assign;$this->display();}

此地的布署都有注释,假若还大概有不懂可能配置现身难点能够留言发问

以上代码对应native_pay.html页面

再就是本身把Wechat的这几个布局放到了TP的config中,这一步大家可以无约束

微信安全支付返回首页varurl="<?phpecho$product_url;?>";//参数1表示图像大小,取值范围1-10;参数2表示质量,取值范围'L','M','Q','H'varqr=qrcode;qr.addData;vardom=document.createElement;dom.innerHTML=qr.createImgTag();varelement=document.getElementById;element.appendChild;
'配置值' define('WEB_HOST', '这是您的网站域名地址'), /*微信支付配置*/ 'WxPayConf_pub'=>array( 'APPID' => '您的APPID', 'MCHID' => '您的商户ID', 'KEY' => '商户秘钥', 'APPSECRET' => '您的APPSECRET', 'JS_API_CALL_URL' => WEB_HOST.'/index.php/Home/WxJsAPI/jsApiCall', 'SSLCERT_PATH' => WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_cert.pem', 'SSLKEY_PATH' => WEB_HOST.'/ThinkPHP/Library/Vendor/WxPayPubHelper/cacert/apiclient_key.pem', 'NOTIFY_URL' => WEB_HOST.'/index.php/Home/WxJsAPI/notify', 'CURL_TIMEOUT' => 30 ));

此处注意生活二维码的js地址,我放在了Public下的JS目录下

step3:将生成二维码的js放在Public目录下(这里近日用不到,在用扫码支付的动静才用到这些js卡塔 尔(英语:State of Qatar),将日志文件放在Public目录下:像自家这么:

step3:扫码之后,就能交到给我们公众平台native配置之处对应的去方法管理公众平台navtive配置:配置地址

step4:成立调整器:这里开创了多少个WxJsAPIController的调节器,这里大家无论起名字,只要这些跟你们在民众平台上的设置相对应就足以

相应的todoPost方法在调节器中:

上面是调控器的代码部分了,首先开始化调节器,将WxPayPubHelper导入

publicfunctiontodoPost(){//以log文件形式记录回调信息,用于调试$log_name=__ROOT__."/Public/native_call.log";//使用native通知接口$nativeCall=newNativeCall_pub();//接收微信请求$xml=$GLOBALS['HTTP_RAW_POST_DATA'];log_result($log_name,":n".$xml."n");$nativeCall->saveData;if($nativeCall->checkSign{$nativeCall->setReturnParameter;//返回状态码$nativeCall->setReturnParameter;//返回信息}else{//提取product_id$product_id=$nativeCall->getProductId();//使用统一支付接口$unifiedOrder=newUnifiedOrder_pub();//根据不同的$product_id设定对应的下单参数,此处只举例一种switch{caseC('WxPayConf_pub.APPID')."static"://与native_call_qrcode.php中的静态链接二维码对应//设置统一支付接口参数//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//spbill_create_ip已填,商户无需重复填写//sign已填,商户无需重复填写$unifiedOrder->setParameter;//商品描述//自定义订单号,此处仅作举例$timeStamp=time();$out_trade_no=C('WxPayConf_pub.APPID').$timeStamp;$unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号$unifiedOrder->setParameter("product_id","$product_id");//商品ID$unifiedOrder->setParameter;//总金额$unifiedOrder->setParameter("notify_url",C('WxPayConf_pub.NOTIFY_URL'));//通知地址$unifiedOrder->setParameter("trade_type","NATIVE");//交易类型$unifiedOrder->setParameter("product_id",$product_id);//用户标识//非必填参数,商户可根据实际情况选填//$unifiedOrder->setParameter;//子商户号//$unifiedOrder->setParameter;//设备号//$unifiedOrder->setParameter;//附加数据//$unifiedOrder->setParameter;//交易起始时间//$unifiedOrder->setParameter;//交易结束时间//$unifiedOrder->setParameter;//商品标记//$unifiedOrder->setParameter;//用户标识//获取prepay_id$prepay_id=$unifiedOrder->getPrepayId();//设置返回码//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//sign已填,商户无需重复填写$nativeCall->setReturnParameter("return_code","SUCCESS");//返回状态码$nativeCall->setReturnParameter("result_code","SUCCESS");//业务结果$nativeCall->setReturnParameter("prepay_id",$prepay_id);//预支付IDbreak;default://设置返回码//设置必填参数//appid已填,商户无需重复填写//mch_id已填,商户无需重复填写//noncestr已填,商户无需重复填写//sign已填,商户无需重复填写$nativeCall->setReturnParameter("return_code","SUCCESS");//返回状态码$nativeCall->setReturnParameter;//业务结果$nativeCall->setReturnParameter("err_code_des","此商品无效");//业务结果break;}}//将结果返回微信$returnXml=$nativeCall->returnXml();log_result($log_name,":n".$returnXml."n");echo$returnXml;}
/** * 初始化 */ public function _initialize() { //引入WxPayPubHelper vendor('WxPayPubHelper.WxPayPubHelper'); }

实则到那边您曾经到位了扫码支付格局后生可畏的功效

接下去是运用统少年老成开荒接口,获取prepay_id的方法:

step4:接下去写一下异步布告管理,与jsapi支付相像:

 public function jsApiCall() { //使用jsapi接口 $jsApi = new JsApi_pub(); //=========步骤1:网页授权获取用户openid============ //通过code获得openid if ) { //触发微信返回code码 $url = $jsApi->createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL')); Header; }else { //获取code码,以获取openid $code = $_GET['code']; $jsApi->setCode; $openid = $jsApi->getOpenId(); } //=========步骤2:使用统一支付接口,获取prepay_id============ //使用统一支付接口 $unifiedOrder = new UnifiedOrder_pub(); //设置统一支付接口参数 //设置必填参数 //appid已填,商户无需重复填写 //mch_id已填,商户无需重复填写 //noncestr已填,商户无需重复填写 //spbill_create_ip已填,商户无需重复填写 //sign已填,商户无需重复填写 $unifiedOrder->setParameter;//商品描述 $unifiedOrder->setParameter;//商品描述 //自定义订单号,此处仅作举例 $timeStamp = time(); $out_trade_no = C('WxPayConf_pub.APPID').$timeStamp; $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号 $unifiedOrder->setParameter;//总金额 $unifiedOrder->setParameter("notify_url",C('WxPayConf_pub.NOTIFY_URL'));//通知地址 $unifiedOrder->setParameter;//交易类型 //非必填参数,商户可根据实际情况选填 //$unifiedOrder->setParameter;//子商户号 //$unifiedOrder->setParameter;//设备号 //$unifiedOrder->setParameter;//附加数据 //$unifiedOrder->setParameter;//交易起始时间 //$unifiedOrder->setParameter;//交易结束时间 //$unifiedOrder->setParameter;//商品标记 //$unifiedOrder->setParameter;//用户标识 //$unifiedOrder->setParameter;//商品ID $prepay_id = $unifiedOrder->getPrepayId(); //=========步骤3:使用jsapi调起支付============ $jsApi->setPrepayId; $jsApiParameters = $jsApi->getParameters(); $this->assign('jsApiParameters',$jsApiParameters); $this->display; //echo $jsApiParameters; }
publicfunctionnotify(){//使用通用通知接口$notify=newNotify_pub();//存储微信的回调$xml=$GLOBALS['HTTP_RAW_POST_DATA'];$notify->saveData;//验证签名,并回应微信。//对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败,//微信会通过一定的策略定期重新发起通知,//尽可能提高通知的成功率,但微信不保证通知最终能成功。if==FALSE){$notify->setReturnParameter;//返回状态码$notify->setReturnParameter;//返回信息}else{$notify->setReturnParameter("return_code","SUCCESS");//设置返回码}$returnXml=$notify->returnXml();echo$returnXml;//==商户根据实际情况设置相应的处理流程,此处仅作举例=======//以log文件形式记录回调信息//$log_=newLog_();$log_name=__ROOT__."/Public/notify_url.log";//log文件路径$this->log_result($log_name,":n".$xml."n");if==TRUE){if($notify->data["return_code"]=="FAIL"){//此处应该更新一下订单状态,商户自行增删操作log_result:n".$xml."n");}elseif($notify->data["result_code"]=="FAIL"){//此处应该更新一下订单状态,商户自行增删操作log_result:n".$xml."n");}else{//此处应该更新一下订单状态,商户自行增删操作log_result:n".$xml."n");}//商户自行增加处理流程,//例如:更新订单状态//例如:数据库操作//例如:推送支付完成信息}}

这里都以复制Wechatdemo的,改改名字罢了,没什么别的的

native扫码支付方式风姿浪漫demo到此就足以啊

接下去是异步布告方法,也是复制的Wechatdemo上的

上面展示下测验的截图:

 public function notify() { //使用通用通知接口 $notify = new Notify_pub(); //存储微信的回调 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; $notify->saveData; //验证签名,并回应微信。 //对后台通知交互时,如果微信收到商户的应答不是成功或超时,微信认为通知失败, //微信会通过一定的策略定期重新发起通知, //尽可能提高通知的成功率,但微信不保证通知最终能成功。 if == FALSE){ $notify->setReturnParameter;//返回状态码 $notify->setReturnParameter;//返回信息 }else{ $notify->setReturnParameter("return_code","SUCCESS");//设置返回码 } $returnXml = $notify->returnXml(); echo $returnXml; //==商户根据实际情况设置相应的处理流程,此处仅作举例======= //以log文件形式记录回调信息// $log_ = new Log_(); $log_name= __ROOT__."/Public/notify_url.log";//log文件路径 log_result($log_name,":n".$xml."n"); if == TRUE) { if ($notify->data["return_code"] == "FAIL") { //此处应该更新一下订单状态,商户自行增删操作 log_result:n".$xml."n"); } elseif($notify->data["result_code"] == "FAIL"){ //此处应该更新一下订单状态,商户自行增删操作 log_result:n".$xml."n"); } else{ //此处应该更新一下订单状态,商户自行增删操作 log_result:n".$xml."n"); } //商户自行增加处理流程, //例如:更新订单状态 //例如:数据库操作 //例如:推送支付完成信息 } }

有标题请留言,上面还有可能会介绍Wechat扫码支付情势二的详尽教程

那边自身把记录日志的类写到了function.php中:

Wechat支付教程jsapi篇://www.jb51.net/article/159351.htm

function log_result{ $fp = fopen; flock ; fwrite($fp,"执行日期:".strftime("%Y-%m-%d-%H:%M:%S",time; flock; fclose;}

Wechat支付教程扫码方式二://www.jb51.net/article/159362.htm

好了 其实调控器的艺术就那样多,没什么别的的了,上边看一下页面,直接上代码吧:

Wechat支付教程刷卡支付://www.jb51.net/article/159401.htm

 微信安全支付  //调用微信JS api 支付 function jsApiCall() { WeixinJSBridge.invoke( 'getBrandWCPayRequest', <?php echo $jsApiParameters; ?>, function{ WeixinJSBridge.log; alert(res.err_code+res.err_desc+res.err_msg); //alert; } ); } function callpay() { if (typeof WeixinJSBridge == "undefined"){ if( document.addEventListener ){ document.addEventListener('WeixinJSBridgeReady', jsApiCall, false); }else if { document.attachEvent('WeixinJSBridgeReady', jsApiCall); document.attachEvent('onWeixinJSBridgeReady', jsApiCall); } }else{ jsApiCall(); } }    贡献一下 

越来越多关于thinkPHP相关内容感兴趣的读者可查看本站专项论题:《ThinkPHP入门教程》、《thinkPHP模板操作手艺计算》、《ThinkPHP常用艺术总结》、《codeigniter入门教程》、《CI框架进级教程》、《Zend FrameWork框架入门教程》及《PHP模板本领计算》。

绝不改变动什么,直接复制就好

愿意本文所述对咱们基于ThinkPHP框架的PHP程序设计有所扶助。

接下去是Wechat大伙儿平台上的陈设了,这里本身遇上过问题,要是有在这里处遇到难点的同班请留言,举例现身了access_deined或者access_notallowed等难点,那都恐怕是因为此地配置不对。请看安排进度截图:

好了,可以测量试验了:下边是本身的测量检验截图:

Wechat上点击进献一下情不自禁支付页面:

到此截止,WechatJSAPI支付效能就满门坚实了

本来,假令你是率先次做,确定会遭逢各个难题,借使您是生手,碰着的主题素材都不明白为啥,及时你做过了再做自己相信照旧恐怕出于细节上的大意会现身难题只是并不是烦躁,耐烦的去开掘难题有标题请留言,上面还或许会介绍微信扫码支付形式风姿洒脱,情势二的详尽教程

Wechat支付教程扫码形式生龙活虎://www.jb51.net/article/159356.htm

微信支付教程扫码格局二://www.jb51.net/article/159362.htm

Wechat支付教程刷卡支付://www.jb51.net/article/159401.htm

越来越多关于thinkPHP相关内容感兴趣的读者可查阅本站专项论题:《ThinkPHP入门教程》、《thinkPHP模板操作技术总括》、《ThinkPHP常用艺术总结》、《codeigniter入门教程》、《CI框架进级教程》、《Zend FrameWork框架入门教程》及《PHP模板工夫计算》。

期待本文所述对大家基于ThinkPHP框架的PHP程序设计具备助于。

本文由365bet体育在线官网发布于网络编程,转载请注明出处:ThinkPHP框架整合微信支付之Native

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。