Android 微信支付
1、开通微信开发者账号
2、创建应用
3、查看应用
4、下载官方Demo
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=11_1
注:这里不得不吐槽一下,这是什么demo ,一堆报错!!!
5、正式接入
商户系统和微信支付系统主要交互说明:
步骤1:用户在商户APP中选择商品,提交订单,选择微信支付。
步骤2:商户后台收到用户支付单,调用微信支付统一下单接口。参见【统一下单API】。
步骤3:统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP。参与签名的字段名为appId,partnerId,prepayId,nonceStr,timeStamp,package。注意:package的值格式为Sign=WXPay
步骤4:商户APP调起微信支付。api参见本章节【app端开发步骤说明】
步骤5:商户后台接收支付通知。api参见【支付结果通知API】
步骤6:商户后台查询支付结果。,api参见【查询订单API】
7、接入Api
注:这里如果结合后端开发。统一下单 和 支付结果通用通知 由后端实现。App只需要“”调起支付”就可以了。
8、Android接入
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5
(1)、注册APPID
privateIWXAPIWXApi;
WXApi= WXAPIFactory.createWXAPI(this, MyApplication.instance().appConfig.wxapi_key);
WXApi.registerApp(MyApplication.instance().appConfig.wxapi_key);
(2)、判断是否安装微信
if(WXApi.getWXAppSupportAPI() < Build.PAY_SUPPORTED_SDK_INT) {
Utils.toastText(ActivityPay.this,"您未安装最新版本微信,不支持微信支付,请安装或升级微信版本");
}
(3)、调起支付
PayReq req =newPayReq();
req.appId= map.get("appid");
req.partnerId= map.get("partnerid");
req.prepayId= map.get("prepayid");
req.nonceStr= map.get("noncestr");
req.timeStamp= map.get("timestamp");
req.packageValue= map.get("package");
req.sign= map.get("sign");
req.extData="app data";
WXApi.sendReq(req);
(4)、支付结果回调
注:这里最坑的,需要在你的包名例如:com.Sample.demo 下建 wxapi 实现 WXPayEntryActivity 如下:
不然没法回调。
更坑的是,这里 回调 errCode == 0 ,并不是真正的成功。应以服务器端的接收的支付通知或查询API返回的结果为准
public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler {
private static final String TAG = "WXPayEntryActivity";
private IWXAPI api;
private Context context;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.account_pay_result);
context = this;
api = WXAPIFactory.createWXAPI(this, "wx_key");
api.handleIntent(getIntent(), this);
}
@Override
public void onReq(BaseReq req) {
}
@Override
public void onResp(final BaseResp resp) {
if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
Intent intent = new Intent(WXPayEntryActivity.this, ActivityPay.class);
intent.putExtra("payState", JsonParseUtil.toJson(resp));
startActivity(intent);
finish();
}
}
}
5、常看签名
https://open.weixin.qq.com/zh_CN/htmledition/res/dev/download/sdk/Gen_Signature_Android.apk
6、常规报错
(1)调不起微信支付,通常通过以下几个步骤检查下
--检查 微信开发平台是否开通微信支付功能?
--检查 App端 的APPID 与服务端下单时的APPID 是否一致?
--检查 App的包名是否与微信开发平台设置的一致?
--检查 App的签名是否与微信开发平台设置的一致?
注:
--如果还是不行,请清除微信缓存重试
--微信最坑的,就是一切都对,没有任何的报错,那就得微信的工程师了
(2)微信支付成功,没有回调
--检查app工程下 上面的 第4 点
作者:小玄子_fhx
链接:http://www.jianshu.com/p/5226cc6b4962
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。