tp5.1微信支付开发系列(二)

接上一篇tp5.1微信支付开发系列(一)

签名类


调用微信支付api的签名使用较多,因此单独封装了一个类来处理请求参数加密。

<?php
/**
 * Created by PhpStorm.
 * User: flyits
 * Date: 2018/12/29
 * Time: 10:07
 */

namespace app\credit\controller\v1\pay;


class Sign
{
    /**
     * 获取数组
     * @param $arr array 请求参数
     * @param $sign string 此处为签名字段下标,
     *                      大部分微信api使用的是sign,
     *                      但JSAPI前端调用时下标为paySign,故有此参数
     * @return array
    */
    public static function set_array(&$arr,$sign = 'sign')
    {
        $arr[$sign] = (new self)->set_sign($arr);
        return $arr;
    }


    //生成加密签名
    private function set_sign($object)
    {
        //签名步骤一:按字典序排序参数
        ksort($object);
        $string = self::ToUrlParams($object);
        //签名步骤二:在string后加入KEY
        $string = $string . "&key=" . config('pay.key');
//        return $string;
        //签名步骤三:md5加密
        $string = md5($string);
        //签名步骤四:所有字符转为大写
        $result = strtoupper($string);
        return $result;
    }

    //拼接字符串以加密
    public static function ToUrlParams($object)
    {
        $buff = "";
        foreach ($object as $k => $v) {
            if ($k != "sign" && $v != "" && !is_array($v)) {
                $buff .= $k . "=" . $v . "&";
            }
        }

        $buff = trim($buff, "&");
        return $buff;
    }
}

支付类

注意设置构造参数里的回调地址以及其他参数,配合基类来看。

order方法对应的路由便是给前端暴露的接口,前端访问时会自动判断是pc端还是手机端(微信内还是微信外)自动调用响应支付接口。

<?php
/**
 * Created by PhpStorm.
 * User: flyits
 * Date: 2018/12/25
 * Time: 15:50
 */

namespace app\credit\controller\v1\pay;


use app\credit\model\Order;
use app\credit\model\User;
use app\lib\exception\ParameterException;
use think\Exception;

class Pay extends BasePay
{
    protected $data = array();
    protected $url = '';


    public function __construct()
    {
        parent::__construct();

        $this->url = config('pay.url.order');

        //商品描述
        $this->data['body'] = input('describe', '信用查询');
        //商品交易订单号,值唯一
        $this->data['out_trade_no'] = 'bx' . get_rand_char(17, 'alpha') . time();
        //当前商品价格,以分为单位
        $this->data['total_fee'] = input('price', 1) * 100;
        //异步接收微信支付结果通知的回调地址
        $this->data['notify_url'] = '';
        $this->setValue($this->data);
    }

    /**
     * 统一一下单接口
     * @author flyits
     * @time 2018/12/29 11:58
     * @throws
     * @return mixed
     */
    public function order()
    {
        $status = \app\credit\service\Order::checkStatus();
        if ($status) {
            return $status;
        }
        //基类判断的调用来源,以便调用对应的支付方式
        switch ($this->getTradeType()) {
            case 'JSAPI':
                {
                    //检测是否分享,此处为我的业务处理判断是否免费,正常直接调用$this->JSAPI()即可
                    if (input('share') == 'share') {
                        $this->setValue(['trade_type' => 'SHARE']);
                      
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值