• Android 微信支付步骤


    以前自己写过微信支付,今天让我用h5调用微信支付,结果还浪费了点时间,虽然时间不长。

    1.导入jar包 。微信提供的jar包
    2.写你的微信支付的代码,其实如果参数都有了就一段代码:

    public void requestWXPay(Context context,OrderModel orderModel) {
            IWXAPI api= WXAPIFactory.createWXAPI(context,orderModel.getAppid());
    //      boolean isPaySupported =api.getWXAppSupportAPI() >= Bui;
    //      if (!isPaySupported) {
    //          Toast.makeText(context, "你的手机微信不支持支付,请更新微信后重试", Toast.LENGTH_SHORT).show();
    //      }
            PayReq payReq=new PayReq();
            payReq.appId=orderModel.getAppid();
            payReq.partnerId=orderModel.getMchid();
            payReq.prepayId=orderModel.getPrepayId();
            payReq.nonceStr=orderModel.getNonceStr();
            payReq.timeStamp=orderModel.getTimestamp();
            payReq.packageValue="Sign=WXPay";
            payReq.sign=orderModel.getSign();
            api.registerApp(orderModel.getAppid());
            api.sendReq(payReq);
        }

    这里面orderModel 是你的后台给你的json数据。

    3.解析gson的时间的时候要对时间进行特殊的处理:

        Gson gson = new GsonBuilder()
    //        2013-09-14 16:45:29
                            .setDateFormat("yyyy-MM-dd HH:mm:ss")
    //                .setDateFormat("yyyy-MM-dd'T'HH:mm:ssZ")
    
                            .create();

    4.写一个你的微信入口
    你的应用程序包名.wxapi
    里面的activity:
    注意:你的清单文件里面的配置要explode 为true,不然你的程序微信不能给你回调

    <activity android:name=".wxapi.WXPayEntryActivity"
            android:exported="true"
            ></activity>
    
     package com.chinaCEB.cebActivity.wxapi;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    
    import com.chinaCEB.cebActivity.R;
    import com.tencent.mm.sdk.modelbase.BaseReq;
    import com.tencent.mm.sdk.modelbase.BaseResp;
    import com.tencent.mm.sdk.openapi.IWXAPI;
    import com.tencent.mm.sdk.openapi.IWXAPIEventHandler;
    import com.tencent.mm.sdk.openapi.WXAPIFactory;
    
    public class WXPayEntryActivity extends AppCompatActivity implements IWXAPIEventHandler {
        public static IWXAPI api;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_wxpay_entry);
            if (api==null) {
                api=WXAPIFactory.createWXAPI(this, "wx52f8500f7f6d98a7");
            }
            api.handleIntent(getIntent(), this);
        }
        @Override
        protected void onNewIntent(Intent intent) {
            // TODO Auto-generated method stub
            super.onNewIntent(intent);
            setIntent(intent);
            api.handleIntent(intent, this);
        }
    
        @Override
        public void onReq(BaseReq baseReq) {
    
        }
    
        @Override
        public void onResp(BaseResp baseResp) {
            int a=baseResp.errCode;
    
        }
    }

    5.签名 ,包名等问题:

    Android stadiO 调试的时候要设置自己的正规的签名,不然不行。

    注意:
    如果返回-1
    可能是因为签名,可能是你的账单什么的不是最新的。所以人家给你返回-1. -1验证失败不只是因为你的签名。很多原因都可以-1

    你在微信后台配置的那些参数,就是签名和包名,就是微信校验你可不可以吊起支付的关键。签名就是微信给你的一个工具,然后生成的。做微信支付这个第三方插件这个事情,我做了一件很挫的事情。就是没有在详细设计的时候,消除风险。
    项目快做完了,又说什么做不了。好失败的一次。自己想想都不能原谅自己。能不能做不是想当然。还忽略了一个问题,就是你的appid,能不能吊起跟你不同的订单号。
    好搓。好搓。当初想第三方支付怎么做的,开始的想法是,人家可以做,我肯定也可以做。后来发现,第三方只是封装了一下,实际上还是不能绕过微信。

    注意;Android 最好也好注册微信。这样就可以避免微信的缓存问题。微信的缓存问题是指: 同样的包名,你这次调用微信用的是不对的keystore,如果你不清理缓存,下次调用微信的时候,它就不再去服务器查询你的keystore是不是对的,尽管你可能换的是对的。
    微信注册也就是:

    final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);
    
            // 将该app注册到微信
            msgApi.registerApp(Constants.APP_ID);

    这样就可以避免每次用错了签名,每次都要清理缓存。

  • 相关阅读:
    获取动态类型变量的属性值
    C#项目实例中读取并修改App.config文件
    c#防止多次运行代码收集
    c# winform 关闭窗体时同时结束线程实现思路
    C# App.config 自定义 配置节 报错“配置系统未能初始化” 解决方法
    在创建窗口句柄之前,不能在控件上调用 Invoke 或 BeginInvoke 解决办法
    用 C# 在 Windows 7 中写注册表想到的
    this指针
    UML类图,用例图,时序图
    常见的框架模式:MVC MVP MTV等
  • 原文地址:https://www.cnblogs.com/caoxinyu/p/6647841.html
Copyright © 2020-2023  润新知