一. 微信开发步骤:
1.注册registerApp
2.获取token
3.获取prepayid
4.调用sendReqjava
二. 服务端签名,安卓客户端具体操做以下:
1.把Constants.java,MD5.java,PayActivity.jav,util.java拷贝到项目下,复制wxapi/WXPayEntryActivity.java到项目下;
2.修改微信开放平台中后台的包名和签名,能够用腾讯开放平台的签名工具获取签名Gen_Signature_Android.apk
(1)AndroidManifest.xml中package名字和项目包名同样;
(2)AndroidManifest.xml中添加.wxapi.WXPayEntryActivity(不添加,支付成功后没法跳转到相应的通知Activity界面);
3.具体调用以下:
else if(url.endsWith(ProtocolConst.WECHAT_PAY))
{
JSONObject json = jo.getJSONObject("data");
String appid = json.getString("appid");
IWXAPI wxApi = WXAPIFactory.createWXAPI(C1_CheckOutActivity.this, appid, true);
wxApi.registerApp(appid);
if(!wxApi.isWXAppInstalled())
{
ToastView toast = new ToastView(C1_CheckOutActivity.this, "没有安装微信");
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return;
}
if(!wxApi.isWXAppSupportAPI())
{
ToastView toast = new ToastView(C1_CheckOutActivity.this, "当前版本不支持支付功能");
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
return;
}
PayReq req = new PayReq();
req.appId = json.getString("appid");
req.partnerId = json.getString("partnerid");
req.prepayId = json.getString("prepayid");
req.nonceStr = json.getString("noncestr");
req.timeStamp = json.getString("timestamp");
req.packageValue = json.getString("package");
req.sign = json.getString("sign");
req.extData = "app data"; // optional
wxApi.sendReq(req);
}
4.接收支付结果的WXPayEntryActivity中的onResp函数里处理支付结果:
public void onResp(BaseResp resp) {
Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);
String msg = "";
if(resp.errCode == 0)
{
msg = "支付成功";
}
else if(resp.errCode == -1)
{
msg = "已取消支付";
}
else if(resp.errCode == -2)
{
msg = "支付失败";
}
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
mDialog = new MyDialog(this, "支付结果", msg);
mDialog.show();
mDialog.positive.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
finish();
}
});
mDialog.negative.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
finish();
}
});
}
}
三.微信遇到的具体问题:
1.在demo中找不到APP_KEY,邮箱发过来的没有此参数,对应文档找到是PaySignKey;
2.测试返回的支付结果是-1,可能产生此问题的地方:包名不一致;应用签名和后台不一致。
3.若是是客户端demo测试,记得注意价格单位是分(调用失败),body是中文的时候须要字符转换(返回错误ERR_JSON)。
客户端demo测试返回支付结果-1,记得删除微信缓冲数据(设置-》应用程序管理器->选中微信->清除数据)
能够用demo里的debug.keystore来测试,功能修改目录:preferences->android->build->custom debug keystore->browse。android