# 申请你的 AppID

注:本文为微信 WP8 终端开发工具的新手使用教程,只涉及教授 SDK 的使用方法,默认读者已经熟悉 VS2012 的基本使用方法,以及具有一定的编程知识基础等。

# 1、申请你的 AppID

请到开发者应用登记页面进行登记,登记并选择移动应用进行设置后,将获得 AppID,可立即用于开发。但应用登记完成后还需要提交审核,只有审核通过的应用才能正式发布使用。

# 2、微信终端 SDK 开发包

SDK 开发包包含 3 个文件:

  • MicroMsgSDK.dll:每个第三方应用必须要导入该 SDK 库,用于实现与微信的交互
  • MicroMsgSDK.XML:API 文档,放到与 MicroMsgSDK.dll 相同的目录,在 VS 中可以提供帮助,如查看函数注释
  • Google.ProtocolBuffersLite.dll:Google 的 ProtocolBuffer 开源库,用于序列化数据,引入即可

请前往 资源下载页 下载最新 SDK 包。

# 3、搭建开发环境

1)在 VS2012 中建立你的工程。

2)如下图所示,右键点击工程的 References,在快捷菜单中选择「Add References」,在打开的弹出框上点击「Browser」按钮,然后选择 WP8 平台 SDK 开发包中的两个 dll 文件。

3)引入 SDK 的 dll 后,在 References 下可以看到引入的 dll 库(如下图所示)。

SDK 的名字空间为 MicroMsg.sdk,在使用前先导入此名字空间:

using MicroMsg.sdk;

# 4、在代码中使用 SDK 开发包

# 4.1 发送请求或响应到微信

现在,你的程序要发送请求或响应给微信,可以通过 IWXAPI 的 sendReqsendResp 两个函数来实现。

  • boolean sendReq(BaseReq req);:第三方 app 主动发送请求给微信,发送请求后会拉起微信应用,微信对请求进行处理后,会发送响应回 App
  • boolean sendResp(BaseResp resp);:微信先向第三方 app 发送请求,拉起第三方 App 界面,当用户操作完成后,第三方 app 通过 sendResp 发送响应数据给微信,拉起微信界面

sendReq 示例:

try
{
    int scene = SendMessageToWX.Req.WXSceneSession; // 发给微信朋友
    WXTextMessage message = new WXTextMessage();
    message.Title = "文本";
    message.Text = "这是一段文本内容";
    SendMessageToWX.Req req = new SendMessageToWX.Req(message, scene);
    IWXAPI api = WXAPIFactory.CreateWXAPI(AppID);
    api.SendReq(req);
}
catch (WXException ex)
{
    MessageBox.Show(ex.Message);
}

AppID 为你在微信开放平台网站上登记应用得到的 AppID。

需要注意的是,SendMessageToWX.Reqscene 参数:

  • 如果 scene 填 WXSceneSession,消息会发送给微信好友
  • 如果 scene 填 WXSceneTimeline,消息会发送至朋友圈
  • 如果 scene 填 WXSceneChooseByUser,由用户来选择发送给好友还是发到朋友圈
  • scene 默认值为 WXSceneChooseByUser

sendResp 示例:

try
{
    WXTextMessage message = new WXTextMessage();
    message.Title = "文本";
    message.Text = "这是一段文本内容";
    GetMessageFromWX.Resp resp = new GetMessageFromWX.Resp(req.Transaction, req.Username, message);
    IWXAPI api = WXAPIFactory.CreateWXAPI(AppID);
    api.SendResp(resp);
}
catch (WXException ex)
{
    MessageBox.Show(ex.Message);
}

req 为微信向你的应用发送请求时传过来的数据对象。

具体要发送的内容由第三方 app 开发者定义,SDK 支持文本、图片、文件、链接、表情、音乐、视频、自定义等多种消息内容。具体可参考 Demo 源码。

# 4.2 处理微信的请求和响应

如果你的程序需要接收微信发送的请求和响应,需要下面 4 步操作:

a. 修改 WMAppManifest.xml

右键点击应用的 Properties 下的 WMAppManifest.xml,选择「Open with...」,然后选择「Xml (Text) Editor」打开该文件。添加以下标签代码:

上面 XML 片段中有两处需要修改的:

1)Name="SDK_DEMO":改成任意你喜欢的名字

2)两个支持的 FileType:一个是 .wechatapp,另外一个是 .wx3b34a14b66641dfd,其中 wx3b34a14b66641dfd 改成你在微信开放平台上登记应用时得到的 AppID,这个务必要写对,不然微信拉不起你的应用

b. 编写微信入口 Page 类

继承 WXEntryBasePage 类,并覆写下表中的函数,来处理来自微信的请求和响应。微信发送的数据已经填到了参数中,可直接取用。

注意:如果覆写 OnNavigatedTo 函数,需要调用 base.OnNavigatedTo,以保证父类中的逻辑得以执行。

c. 继承系统的 UriMapperBase 类

大致逻辑如下:

class AssociationUriMapper : UriMapperBase
{
    private string tempUri;
    public override Uri MapUri(Uri uri)
    {
        tempUri = uri.ToString();
        // 根据文件类型打开程序
        if (tempUri.Contains("/FileTypeAssociation"))
        {
            // 获取 fileID (after "fileToken=")
            int fileIDIndex = tempUri.IndexOf("fileToken=") + 10;
            string fileID = tempUri.Substring(fileIDIndex);
            // 获取文件名
            string incommingFileName = SharedStorageAccessManager.GetSharedFileName(fileID);
            // 获取文件后缀
            int extensionIndex = incommingFileName.LastIndexOf('.') + 1;
            string incommingFileType = incommingFileName.Substring(extensionIndex).ToLower();
            // 根据不同文件类型,跳转不同参数的地址
            switch (incommingFileType)
            {
                case "wx3b34a14b66641dfd":
                    return new Uri("/DemoEntryPage.xaml?fileToken=" + fileID, UriKind.Relative);
                default:
                    return new Uri("/MainPage.xaml", UriKind.Relative);
            }
        }
        else
        {
            return uri;
        }
    }
}
  • case 'wx3b34a14b66641dfd':改成你的 AppID
  • "/DemoEntryPage.xaml?fileToken=":改成步骤 b 中继承 WXEntryBasePage 的 Page 的路径

d. 修改 App.xaml.cs 文件

App.xaml.csInitializePhoneApplication() 函数中,增加一行代码:

// Assign the URI-mapper class to the application frame.
RootFrame.UriMapper = new AssociationUriMapper();

注意事项

1)在测试的时候,确保你安装的 WP8 的微信(4.0 以上版本)

2)不要在 Demo 的基础上修改来形成你的应用程序,因为如果其他人跟你一样做,你们的 AppStore 上的 AppID 是一样的

微信 SDK Sample Demo 源码