ThinkPHP框架整合微信支付之JSAPI模式图文详解分享!

本文实例讲述了ThinkPHP框架整合微信支付之JSAPI模式。分享给大家供大家参考,具体如下:

目前微信是很火的,微信支付目前很少在网上能看到一系列详细的demo,因此,花一点时间来做一下关于微信支付系列教程,

本次教程是JSAPI模式支付,其他的还会继续写下去

首先,下载微信支付的demo,我们根据微信上的demo来整合到TP中。

介绍下我们这里需要用到的几个文件:
ThinkPHP框架整合微信支付之JSAPI模式图文详解

在demo文件夹中:

js_api_call.php:提供了微信jsapi的主要功能
log_.php:提供打印日志功能
notify_url.php:异步通知功能
notify_url.log:异步通知日志
qrcode.js:生成二维码js插件

接下来介绍下WxPayPubHelper文件夹下的文件:

ThinkPHP框架整合微信支付之JSAPI模式图文详解

cacert 文件夹是存放微信证书的(PS:具体我还没怎么用证书,虽然下载下来了,证书请在微信商户平台上下载)
SDKRuntimeException.php:这个就是处理异常的、
WxPay.pub.config.php:这个是做一些配置的,稍后会详细讲解
WxPayPubHelper.php:这个其实就是微信支付的工具类,对于初学者只要知道怎么用他里面的方法就够了

OK,了解了微信官方提供的文件,我们就可以开始整合到TP中了,废话不多说,这就开始!

step1:将demo中的WxPayPubHelper整个文件夹都复制到TP的Vendor目录下,像我这样:

ThinkPHP框架整合微信支付之JSAPI模式图文详解

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

ThinkPHP框架整合微信支付之JSAPI模式图文详解

这里的配置都有注释,如果还有不懂或者配置出现问题可以留言提问

同时我把微信的这个配置放到了TP的config中,这一步大家可以随意

  <?php  return array(   //'配置项'=>'配置值'   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   )  );

step3:将生成二维码的js放在Public目录下(这里目前用不到,在用扫码支付的情况才用到这个js),将日志文件放在Public目录下:像我这样:

ThinkPHP框架整合微信支付之JSAPI模式图文详解

step4:创建控制器:这里创建了一个WxJsAPIController的控制器,这里大家随便起免费精选名字大全,只要这个跟你们在公众平台上的设置相对应就可以(公众平台设置稍后介绍)

ThinkPHP框架整合微信支付之JSAPI模式图文详解

下面是控制器的代码部分了,首先初始化控制器,将WxPayPubHelper导入

  /**    * 初始化    */   public function _initialize()   {    //引入WxPayPubHelper    vendor('WxPayPubHelper.WxPayPubHelper');   }

接下来是使用统一支付接口,获取prepay_id的方法:

   public function jsApiCall()   {    //使用jsapi接口    $jsApi = new JsApi_pub();        //=========步骤1:网页授权获取用户openid============    //通过code获得openid    if (!isset($_GET['code']))    {     //触发微信返回code码     $url = $jsApi->createOauthUrlForCode(C('WxPayConf_pub.JS_API_CALL_URL'));     Header("Location: $url");    }else    {     //获取code码,以获取openid     $code = $_GET['code'];     $jsApi->setCode($code);     $openid = $jsApi->getOpenId();    }        //=========步骤2:使用统一支付接口,获取prepay_id============    //使用统一支付接口    $unifiedOrder = new UnifiedOrder_pub();        //设置统一支付接口参数    //设置必填参数    //appid已填,商户无需重复填写    //mch_id已填,商户无需重复填写    //noncestr已填,商户无需重复填写    //spbill_create_ip已填,商户无需重复填写    //sign已填,商户无需重复填写    $unifiedOrder->setParameter("openid",$openid);//商品描述    $unifiedOrder->setParameter("body","贡献一分钱");//商品描述    //自定义订单号,此处仅作举例    $timeStamp = time();    $out_trade_no = C('WxPayConf_pub.APPID').$timeStamp;    $unifiedOrder->setParameter("out_trade_no",$out_trade_no);//商户订单号    $unifiedOrder->setParameter("total_fee","1");//总金额    $unifiedOrder->setParameter("notify_url",C('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("product_id","XXXX");//商品ID        $prepay_id = $unifiedOrder->getPrepayId();    //=========步骤3:使用jsapi调起支付============    $jsApi->setPrepayId($prepay_id);        $jsApiParameters = $jsApi->getParameters();        $this->assign('jsApiParameters',$jsApiParameters);    $this->display('pay');    //echo $jsApiParameters;   }

这里都是复制微信demo的,改改免费精选名字大全罢了,没什么其他的

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/phpttorial/481635.html

(0)
上一篇 2020年11月10日
下一篇 2020年11月10日

精彩推荐