AppWx.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace app\common\library\easywechat;
  3. use EasyWeChat\Factory;
  4. use app\common\exception\BaseException;
  5. use app\common\model\app\AppWx as AppWxModel;
  6. /**
  7. * 微信小程序
  8. */
  9. class AppWx
  10. {
  11. public static function getApp($app_id = null){
  12. // 获取当前小程序信息
  13. $wxConfig = AppWxModel::getAppWxCache($app_id);
  14. // 验证appid和appsecret是否填写
  15. if (empty($wxConfig['wxapp_id']) || empty($wxConfig['wxapp_secret'])) {
  16. throw new BaseException(['msg' => '请到 [后台-应用-小程序设置] 填写appid 和 appsecret']);
  17. }
  18. $config = [
  19. 'app_id' => $wxConfig['wxapp_id'],
  20. 'secret' => $wxConfig['wxapp_secret'],
  21. 'response_type' => 'array',
  22. ];
  23. return Factory::miniProgram($config);
  24. }
  25. public static function getWxPayApp($app_id){
  26. // 获取当前小程序信息
  27. $wxConfig = AppWxModel::getAppWxCache($app_id);
  28. // 验证appid和appsecret是否填写
  29. if (empty($wxConfig['wxapp_id']) || empty($wxConfig['wxapp_secret'])) {
  30. throw new BaseException(['msg' => '请到 [后台-应用-小程序设置] 填写appid 和 appsecret']);
  31. }
  32. if (empty($wxConfig['cert_pem']) || empty($wxConfig['key_pem'])) {
  33. throw new BaseException(['msg' => '请先到后台小程序设置填写微信支付证书文件']);
  34. }
  35. // cert目录
  36. $filePath = root_path() . 'runtime/cert/appwx/' . $wxConfig['app_id'] . '/';
  37. $config = [
  38. 'app_id' => $wxConfig['wxapp_id'],
  39. 'mch_id' => $wxConfig['mchid'],
  40. 'key' => $wxConfig['apikey'], // API 密钥
  41. // 如需使用敏感接口(如退款、发送红包等)需要配置 API 证书路径(登录商户平台下载 API 证书)
  42. 'cert_path' => $filePath . 'cert.pem',
  43. 'key_path' => $filePath . 'key.pem',
  44. 'sandbox' => false, // 设置为 false 或注释则关闭沙箱模式
  45. ];
  46. return Factory::payment($config);
  47. }
  48. /**
  49. * 获取session_key
  50. * @param $code
  51. * @return array|mixed
  52. */
  53. public static function sessionKey($app, $code)
  54. {
  55. /**
  56. * code 换取 session_key
  57. * ​这是一个 HTTPS 接口,开发者服务器使用登录凭证 code 获取 session_key 和 openid。
  58. * 其中 session_key 是对用户数据进行加密签名的密钥。为了自身应用安全,session_key 不应该在网络上传输。
  59. */
  60. $url = 'https://api.weixin.qq.com/sns/jscode2session';
  61. $result = json_decode(curl($url, [
  62. 'appid' => $app['config']['app_id'],
  63. 'secret' => $app['config']['secret'],
  64. 'grant_type' => 'authorization_code',
  65. 'js_code' => $code
  66. ]), true);
  67. if (isset($result['errcode'])) {
  68. return false;
  69. }
  70. return $result;
  71. }
  72. }