美文网首页
Android.微信支付及那些坑

Android.微信支付及那些坑

作者: 小玄子_fhx | 来源:发表于2017-01-05 15:48 被阅读0次

    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 点

    相关文章

      网友评论

          本文标题:Android.微信支付及那些坑

          本文链接:https://www.haomeiwen.com/subject/vjlnvttx.html