版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/8404604.html
相比微信的登录和分享功能,微信支付sdk的接入显得相当简单,因为大部分的事情需要由服务端或者后台来做
基本流程如下:
1、客户端向服务端发起购买商品请求
2、服务端计算实际支付金额,向微信请求订单
3、微信返回预支付订单信息,服务端将该信息传给客户端
4、客户端解析预支付订单信息json,向微信发起支付请求
5、支付成功后,微信向服务端预设的url和客户端返回支付结果
6、服务端刷新用户商品数据,并向客户端推送支付结果
核心函数只有一个
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为支付成功
不过这个值仅仅只是用户支付的结果,但不意味着支付到账,所以实际数据的更新,要取决于服务器