快乐每一天

自己选择的路,跪着也要走下去...

标签 微信小程序 下的文章

微信小程序支付(借用第三方类库完成)

首先贴出类库传送门
说明文档传送门

再贴出为Thinkphp5整合过后的sdk 传送门(主要是对命名空间的处理)下载后放到extend目录里面即可。

2019-03-06T05:10:20.png

方法调用

<?php
/**
 * Created by PhpStorm.
 * User: 项羽
 * Date: 2019/3/5
 * Time: 18:20
 */

namespace app\api\controller\book;

class Pay
{
    /*订单支付*/
    public function payOrder(){
        $openid='owMmW5HwAxg3MRABK9c0Sa-rW_ls';
        $action = 'payResult';//回调方法
        $preData = [
            'money' => 0.01,//查询的订单金额
            'ordersn' =>time(),//查询的订单编号
            'openid' => $openid//用户openid
        ];
        $body = '书籍';//商品描述
        $class = new \app\api\controller\book\Paylibrary();
        $item =$class->processPay($action,$preData,$body);
        return $item;
    }
}

专有类库整合

<?php
/**
 * Created by PhpStorm.
 * User: 项羽
 * Date: 2019/3/6
 * Time: 11:33
 * 支付专有类库
 */

namespace app\api\controller\book;

use think\Request;
use yansongda\pay\Pay;

class Paylibrary
{
    protected $appid = '';     //小程序appid
    protected $mch_id = '';           //商户号
    protected $key = '';  //商户秘钥
    /**
     * 支付的配置文件
     * @param $action   回调地址的方法
     * @return array    支付配置数据
     */
    public function processConfig($action){
        $request = Request::instance();
        $baseurl = $request->domain();
        $config = [
            'miniapp_id' => $this->appid, // 小程序 APPID
            'mch_id' => $this->mch_id,
            'key' => $this->key,
            'notify_url' => $baseurl.'/api/Payresult/'.$action,//支付回调url
            'cert_client' => './apiclient_cert.pem', // optional,退款等情况时用到(文件放在更目录下)
            'cert_key' => './apiclient_key.pem',// optional,退款等情况时用到
            'log' => [ // optional
                'file' => './logs/wechat.log',
                'level' => 'info', // 建议生产环境等级调整为 info,开发环境为 debug
                'type' => 'single', // optional, 可选 daily.
                'max_file' => 30, // optional, 当 type 为 daily 时有效,默认 30 天
            ],
            'http' => [ // optional
                'timeout' => 5.0,
                'connect_timeout' => 5.0,
            ],
        ];
        return $config;
    }

    /**
     * 统一下单
     * @param $action           回调方法
     * @param $money            订单金额
     * @param $ordersn          订单号
     * @param $openid           openid
     * @return \yansongda\supports\Collection   支付成功携带验签的数据,客户端使用该数据拉起支付页面
     */
    public function processPay($action,$preData,$body = '订单支付'){
        $total_fee = $preData['money'] * 100;
        $payData = [
            'out_trade_no' => $preData['ordersn'],
            'total_fee' => $total_fee, // **单位:分**
            'body' => $body,
            'openid' => $preData['openid'],
        ];
        $config = $this->processConfig($action);
        $pay = Pay::wechat($config)->miniapp($payData);
        return $pay;
    }

    /**
     * 生成随机数
     * @param $length      位数
     * @return null|string 返回字符串
     */
    public function random($length){
        $str = null;
        $strBase = "0123456789";//如有需求可增加特殊符号
        $max = strlen($strBase) - 1;

        for ($i = 0;$i < $length;$i++) {
            $str .= $strBase[rand(0, $max)];
        }
        return $str;
    }
}

最后就是测试接口返回参数是否正确,返回的是5个参数

阅读全文