以前自己写过微信支付,今天让我用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);

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

Android 微信支付步骤的更多相关文章

  1. 转-Android微信支付

    http://blog.fangjie.info/android微信支付/ Android微信支付 2014-08-09 一.使用微信官方的提供的demo里的appid等 1.微信接口上手指南:(从“ ...

  2. 解决Android微信支付官方demo运行失败

    Android微信支付官方demo运行失败,在此简单记录一下解决步骤 1.httpclient错误 官方给的demo是eclipse的,打开之后提示httpclient的错误,我知道在as下解决htt ...

  3. Android微信支付SDK开发笔记

    一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...

  4. Android微信支付SDK开发

    一.准备工作 1.开发平台及SDK下载 微信开放平台 https://open.weixin.qq.com 下载SDK 微信支付Demo下载 http://pay.weixin.qq.com/wiki ...

  5. Android 微信支付&支付宝支付

    由于项目需求,加入这2个功能记录一些需要注意的地方 一.微信支付 微信支付在2016年4月份左右稍微调整了一下支付过程,但是文档却没怎么更新,这也是百度上为什么那么多开发者都说微信是个大坑. 身为一个 ...

  6. android微信支付总结+自己搭建服务器

    1.前期注册操作 1-1:微信开发平台:https://open.weixin.qq.com/ 1-2:创建移动应用 签名获取: 1.将自己的apk签名打包,运行到手机上. 2.将微信支付的签名工具, ...

  7. Android 微信支付资料收集

    老板要求支持微信支付,收集了些资料做后期参考 http://www.360doc.com/content/15/0214/10/7044580_448519997.shtml http://www.t ...

  8. Android微信支付流程及返回码-1之坑

    http://www.51testing.com/html/36/n-3724336.html 之前做微信支付的时候,直接是以库形式引入项目的,虽然一直觉得微信支付的开发文档不太理想,但是印象中也没有 ...

  9. Android微信支付V3版

    由于公司需求做微信APP支付,在集成过程中也遇到各种问题,比如说签名错误,body编码必须为UTF-8.APP端无法调用支付页面直接到支付结果页面.结果为null,code=-1等等: 1.签名错误问 ...

随机推荐

  1. 【MATLAB】对离散采样信号添加高斯白噪声(已知Eb/N0)

    (1)首先计算已知信号序列(采样之后得到的信号)的平均功率.该序列在第n个点处的功率为: 如果已知的信号序列中的总共的点数为N个,则该序列的平均功率为: 在MATLAB中求平均功率的方法是: Pav= ...

  2. XFS: Cross Frame Script (跨框架脚本) 攻击。

    一.Cross Frame Script (跨框架脚本) 攻击什么是Cross Frame Script?很简单,做个实验就知道了.把下面的这段HTML代码另存为一个html文件,然后用ie浏览器打开 ...

  3. Selenium入门15 截图

    截图方法: 1 保存截图 get_screenshot_as_file('保存路径\\文件名.png')     #有一个\是转义符 2 保存截图 save_screenshot('保存路径\\文件名 ...

  4. Linux高性能server编程——定时器

    版权声明:本文为博主原创文章.未经博主允许不得转载. https://blog.csdn.net/walkerkalr/article/details/36869913  定时器 服务器程序通常管 ...

  5. Centos下Yum安装PHP5.5,5.6

    默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...

  6. js循环读取json数据,将读取到的数据用js写成表格

    ①js循环读取json数据的方式: var data=[{"uid":"2688","uname":"*江苏省南菁高级中学 022 ...

  7. 3.vue引入axios全局配置

    前言: Vue官方推荐使用axios来进行异步访问. axios文档参考:axios中文文档 开始搭建: 1.引入axios (1)打开终端 win+R (2)切换到项目路径: g: cd Webap ...

  8. 在Linux上部署Kettle环境

    首先我们有一个正常安装的,桌面版的Linux. Kettle的应用程序是Linux版本与Windows版本在同一个文件夹下共存的,所以可以直接把本机上的Kettle解压,通过FTP工具上传到Linux ...

  9. Centos防火墙添加IP白名单

    Centos iptables防火墙添加IP白名单,指定IP可访问端口 vi /etc/sysconfig/iptables 以下为我虚拟机的防火墙为例(Centos 7) # sample conf ...

  10. ES6的数组方法之Array.from

    首先说说什么是数组:数组在类型划分上归为Object,属于比较特殊的对象,数组的索引值类似于对象的key值. 数组的几个注意点: 1.数组的长度是可读属性,不可更改,数组的长度根据索引最大值. 2.数 ...