版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/8404604.htmlhtml
相比微信的登陆和分享功能,微信支付sdk的接入显得至关简单,由于大部分的事情须要由服务端或者后台来作java
基本流程以下:json
一、客户端向服务端发起购买商品请求api
二、服务端计算实际支付金额,向微信请求订单服务器
三、微信返回预支付订单信息,服务端将该信息传给客户端微信
四、客户端解析预支付订单信息json,向微信发起支付请求app
五、支付成功后,微信向服务端预设的url和客户端返回支付结果ide
六、服务端刷新用户商品数据,并向客户端推送支付结果函数
核心函数只有一个微信支付
public static void SendPay(String appId, String partnerId, String prepayId, String nonceStr, String timeStamp, String packageValue, String sign) { PayReq req = new PayReq(); req.appId = appId; req.partnerId = partnerId; req.prepayId = prepayId; req.nonceStr = nonceStr; req.timeStamp = timeStamp; req.packageValue = packageValue; req.sign = sign; api.sendReq(req); }
回调的处理和分享相似,java类文件名为WXPayEntryActivity,该类继承Activity并实现IWXAPIEventHandler,一样须要放在wxapi文件夹中
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler { private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if(api == null) { api = WXAPIFactory.createWXAPI(this, "APP_ID"); api.registerApp("APP_ID"); api.handleIntent(getIntent(), this); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { } @Override public void onResp(BaseResp resp) { if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) { UnityPlayer.UnitySendMessage("ThirdPartySdkManager","WechatPayCallback", String.valueOf(resp.errCode)); finish(); } } }
支付返回的errCode为int型:
-2对应取消支付
-1对应支付失败
0为支付成功
不过这个值仅仅只是用户支付的结果,但不意味着支付到帐,因此实际数据的更新,要取决于服务器