| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 | <?phpnamespace app\common\util;use EasyWeChat\Factory;use EasyWeChat\Kernel\Exceptions\DecryptException;use EasyWeChat\Kernel\Exceptions\InvalidConfigException;use EasyWeChat\Kernel\Support\Collection;use GuzzleHttp\Exception\GuzzleException;use Psr\Http\Message\ResponseInterface;class MiniProgram{//    public const pay_notify_url = 'https://natapp.sphper.com';    public const pay_notify_url = 'https://test.server.ycxxkj.com/deliver/api/public/index.php';    /**     * 小程序实例     * @return object     */    public static function getApp(): object    {        $wechat = config('wechat');        $config = [            // 必要配置            'app_id' => $wechat['app_id'],//appId            'secret' => $wechat['secret'],            // 下面为可选项            // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名            'response_type' => 'array',        ];        return Factory::miniProgram($config);    }    /**     * 支付实例     * @return object     */    public static function getPay(): object    {        $wechat = config('wechat');        $config = [            // 必要配置            'app_id' => $wechat['app_id'],            'mch_id' => $wechat['mch_id'],            'key' => $wechat['key'],            'cert_path' => $wechat['cert_path'],            'key_path' => $wechat['key_path'],            'notify_url' => $wechat['notify_url'],        ];        return Factory::payment($config);    }    /**     * 获取手机号 非解密     * @param $code     * @return array|Collection|object|ResponseInterface|string     * @throws InvalidConfigException     * @throws GuzzleException     */    public static function getPhoneNumber($code)    {        $params = [            'code' => $code        ];        $app = self::getApp();        return $app->live->httpPostJson('wxa/business/getuserphonenumber', $params);    }    /**     * 获取手机号 解密     * @param $session_key     * @param $iv     * @param $encryptedData     * @return array     * @throws DecryptException     */    public static function getPhoneNumberIv($session_key, $iv, $encryptedData): array    {        $app = self::getApp();        return $app->encryptor->decryptData($session_key, $iv, $encryptedData);    }    /**     * NATIVE     * @param $order_no     * @param $total_fee     * @return false|string     */    public static function nativePay($order_no, $total_fee)    {        $app = self::getPay();        $result = $app->order->unify([            'trade_type' => 'NATIVE',            'body' => '快递柜费用',            'out_trade_no' => $order_no,            'total_fee' => $total_fee * 100,            'notify_url' => self::pay_notify_url . '/mobile/payNotify/index',            'product_id' => 1, // $message['product_id'] 则为生成二维码时的产品 ID            // ...        ]);        if ($result['return_code'] == 'SUCCESS' && $result['result_code'] == 'SUCCESS') {            return QrCode::createEwm($result['code_url']);        }        return false;    }    /**     * JSAPI     * @param $order_no     * @param $total_fee     * @param $openid     * @return mixed     */    public static function JsApiPay($order_no, $total_fee, $openid)    {        $app = self::getPay();        $jsSdk = $app->jssdk;        $result = $app->order->unify([            'body' => '快递柜费用',            'out_trade_no' => $order_no,            'total_fee' => intval($total_fee * 100),            'notify_url' => self::pay_notify_url . '/api/payNotify/index', // 支付结果通知网址,如果不设置则会使用配置里的默认地址            'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型            'openid' => $openid,        ]);        $pay_json = false;        if ($result['return_code']=='SUCCESS'&&$result['result_code']=='SUCCESS'){            $pay_json = json_decode($jsSdk->bridgeConfig($result['prepay_id']));        }        return $pay_json;    }    /**     * 创建二维码     * @param $param     * @return string     */    public static function createEwm($param): string    {        $app = self::getApp();        $response = $app->app_code->get(config('ewm.path') . '?' . $param);        $file_name = self::rand() . '.png';        $dir = public_path() . 'storage/topic/' . date('Ymd');        if (!is_dir($dir)) {            mkdir($dir);        }        $saveFile = $dir . '/' . $file_name;        $url = request()->domain() . getVirRootDir() . '/storage/topic/' . date('Ymd') . '/' . $file_name;        file_put_contents($saveFile, $response);        return $url;    }    private static function rand()    {        $len = 10;        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';        $string = time();        for (; $len >= 1; $len--) {            $position = rand() % strlen($chars);            $position2 = rand() % strlen($string);            $string = substr_replace($string, substr($chars, $position, 1), $position2, 0);        }        return $string;    }}
 |