<p align="center">
  <a href="https://www.medusajs.com">
  <picture>
    <source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/59018053/229103275-b5e482bb-4601-46e6-8142-244f531cebdb.svg">
    <source media="(prefers-color-scheme: light)" srcset="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
    <img alt="Medusa logo" src="https://user-images.githubusercontent.com/59018053/229103726-e5b529a3-9b3f-4970-8a1f-c6af37f087bf.svg">
    </picture>
  </a>
</p>
<h1 align="center">
  Medusa 微信认证插件
</h1>

<h4 align="center">
  <a href="https://docs.medusajs.com">Documentation</a> |
  <a href="https://www.medusajs.com">Website</a>
</h4>

<p align="center">
  Building blocks for digital commerce
</p>
<p align="center">
  <a href="https://github.com/medusajs/medusa/blob/master/CONTRIBUTING.md">
    <img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat" alt="PRs welcome!" />
  </a>
    <a href="https://www.producthunt.com/posts/medusa"><img src="https://img.shields.io/badge/Product%20Hunt-%231%20Product%20of%20the%20Day-%23DA552E" alt="Product Hunt"></a>
  <a href="https://discord.gg/xpCwq3Kfn8">
    <img src="https://img.shields.io/badge/chat-on%20discord-7289DA.svg" alt="Discord Chat" />
  </a>
  <a href="https://twitter.com/intent/follow?screen_name=medusajs">
    <img src="https://img.shields.io/twitter/follow/medusajs.svg?label=Follow%20@medusajs" alt="Follow @medusajs" />
  </a>
</p>

## 简介

这是一个为 Medusa 电商系统开发的微信小程序第三方登录认证插件。支持微信小程序的静默登录和授权登录，让用户可以通过微信账号快速登录你的电商应用。

## 功能特性

- ✅ 微信小程序静默登录
- ✅ 微信小程序授权登录（获取用户信息）
- ✅ 自动创建客户账户
- ✅ JWT Token 认证
- ✅ 完整的错误处理
- ✅ TypeScript 支持
- ✅ 单元测试

## 兼容性

本插件兼容 Medusa v2.4.0 及以上版本。

## 安装和配置

### 1. 安装插件

```bash
npm install @vestige06/medusa-auth-wechat
```

### 2. 环境变量配置

在你的 `.env` 文件中添加微信小程序配置：

```bash
# 微信小程序配置
WECHAT_MINIPROGRAM_APP_ID=your_wechat_app_id
WECHAT_MINIPROGRAM_APP_SECRET=your_wechat_app_secret
```

### 3. Medusa 配置

在 `medusa-config.ts` 中配置认证模块：

```typescript
import { defineConfig, Modules } from "@medusajs/framework/utils"

module.exports = defineConfig({
  projectConfig: {
    http: {
      authMethodsPerActor: {
        customer: ["emailpass", "wechat"], // 添加微信认证
      },
    },
  },
  modules: [
    {
      resolve: "@medusajs/medusa/auth",
      options: {
        providers: [
          {
            resolve: "@medusajs/medusa/auth-emailpass",
            id: "emailpass",
          },
          {
            resolve: "@vestige06/medusa-auth-wechat",
            id: "wechat",
            options: {
              appId: process.env.WECHAT_MINIPROGRAM_APP_ID,
    appSecret: process.env.WECHAT_MINIPROGRAM_APP_SECRET,
            },
          },
        ],
      },
    },
  ],
})
```

## 使用方法

### 后端 API

插件会自动注册以下 API 端点：

```
POST /store/auth/wechat
```

请求体：
```json
{
  "code": "微信登录凭证",
  "userInfo": {
    "nickName": "用户昵称",
    "avatarUrl": "头像URL"
  }
}
```

响应：
```json
{
  "success": true,
  "customer": {
    "id": "客户ID",
    "email": "wechat_openid@temp.com",
    "first_name": "用户昵称"
  },
  "access_token": "JWT令牌",
  "message": "微信登录成功"
}
```

### 前端集成（微信小程序）

参考 `examples/wechat-miniprogram.js` 文件中的完整示例。

#### 静默登录

```javascript
const wechatAuth = require('./utils/wechat-auth')

// 静默登录
const result = await wechatAuth.wechatSilentLogin()
if (result.success) {
  console.log('登录成功', result.customer)
}
```

#### 授权登录

```javascript
// 授权登录（获取用户信息）
const result = await wechatAuth.wechatAuthLogin()
if (result.success) {
  console.log('登录成功', result.customer)
}
```

#### 发送认证请求

```javascript
// 使用 token 发送请求
const userInfo = await wechatAuth.authenticatedRequest('/store/customers/me')
```

## 开发和测试

### 运行测试

```bash
npm test
```

### 构建插件

```bash
npm run build
```

### 开发模式

```bash
npm run dev
```

## 文件结构

```
src/
├── api/
│   └── store/
│       └── auth/
│           └── wechat/
│               └── route.ts          # 微信认证 API 路由
├── providers/
│   ├── wechat-auth.ts               # 微信认证提供者
│   └── __tests__/
│       └── wechat-auth.test.ts      # 单元测试
examples/
└── wechat-miniprogram.js            # 前端使用示例
```

## 注意事项

1. **微信小程序配置**：确保在微信公众平台配置正确的服务器域名
2. **HTTPS 要求**：生产环境必须使用 HTTPS
3. **Token 安全**：妥善保管 JWT Token，建议设置合理的过期时间
4. **错误处理**：前端应该处理网络错误和认证失败的情况

## 许可证

MIT License

## 贡献

欢迎提交 Issue 和 Pull Request！

## 支持

如果你在使用过程中遇到问题，可以：

1. 查看 [Medusa 官方文档](https://docs.medusajs.com)
2. 提交 [GitHub Issue](https://github.com/your-repo/issues)
3. 加入 [Medusa Discord 社区](https://discord.com/invite/medusajs)

Learn more about [Medusa’s architecture](https://docs.medusajs.com/learn/introduction/architecture) and [commerce modules](https://docs.medusajs.com/learn/fundamentals/modules/commerce-modules) in the Docs.

## Community & Contributions

The community and core team are available in [GitHub Discussions](https://github.com/medusajs/medusa/discussions), where you can ask for support, discuss roadmap, and share ideas.

Join our [Discord server](https://discord.com/invite/medusajs) to meet other community members.

## Other channels

- [GitHub Issues](https://github.com/medusajs/medusa/issues)
- [Twitter](https://twitter.com/medusajs)
- [LinkedIn](https://www.linkedin.com/company/medusajs)
- [Medusa Blog](https://medusajs.com/blog/)
