Unity接入微信支付的时候主要还是看官方文档,再结合其他人的博客,最终还是掉坑里了,这里统一说一下流程和遇到的问题。
- 微信开放平台和商户平台是2个不同的平台,如果是做App内支付,我们的流程是先去微信开放平台的账号(7个工作日以内),然后创建一个应用,注意Android的应用需要提供应用签名,这个是可以去微信开发平台的资源下载地址下载一个看签名的工具,安装在手机里,输入你的应用的bundlerID(com.xxx.xx)就可以了,下载链接。所以你创建的应用最好使用正式的bundlerID和正式的keystore签名。
- 申请开发者资质(1到5个工作日),应该可以和应用一块审,需要提供公司的一些信息,然后申请完开发者资质后还需要申请微信支付权限(1-5)个工作日,搞不懂为啥不能一次审完,这个地方耽误了好多时间。审核通过后你会收到一封邮件,然后会告诉你的商户平台ID和密码,然后去商户平台验证腾讯给你账户发的随机金额,就可以完成审核了。
- 参见微信开发平台的官方流程,客户端发送购买请求到服务器,比如购买钻石,服务器收到请求后调用微信支付统一下单接口,生成预付单信息,然后服务器将客户端调用支付接口需要的参数都传回来,包括appid,partnerid(商户平台ID,mch_id),prepayid,package,nocestr,timestamp,sign。注意这个sign不是微信下单返回给服务器的sign,(服务器调用微信统一下单也会返回一个sign,巨坑),而是服务器对appid,prepayid,package等进行的签名,签名前的字符串中的参数名必须ASCII码从小到大排序,这个也很重要,不然会没有回调的参见微信官方文档业务流程步骤3,客户端拿到这些数据调用微信的调起支付即可。
- WXPayEntryActivity这个Activity必须放在你的bundleID.wxapi下。类似com.product.mycompany.wxapi。这个activity是必须的,而且必须在这个包名下。微信支付完成后,会回调WXPayEntryActivity的OnResp函数。这个Activity别忘了在unity的Plugin目录下的manifest注册。
具体代码部分可以参考http://blog.csdn.net/rcfalcon/article/details/52518700,它的sign步骤是在客户端完成的,这个也可以在服务器完成,客户端只需要将服务器传回来的sign扔给微信即可。代码里签名函数需要用到一个”key = xxxxx”,这个key是商户平台提供的api秘钥。
总的来说微信支付不算复杂,你需要知道的是Android如何与Unity交互,建议写一个新工程去测试支付,打出的包需要和你在微信开发平台创建的应用具有相同的签名和包名,服务器返回的sign很重要,一定要按文档要求的进行签名,注意大小写和按ASCII码排序。细心点应该不会出错。