Android 微信支付

2017-11-07  本文已影响34人  LucasAdam

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

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读