Android第三方微信支付教程_Android

做了微信支付,下载了Demo,发现和之前有所改动,v3.0的版本,也许有的朋友还在摸索,这里我已经成功支付,话不多说,直接进入主题:

一、首先要在微信开发平台注册账号,新增应用,填写正确的包名,正确的签名(MD5中的一串字符冒号去掉,全部小写),当然也会生成的AppID和AppSecret都有用!最后还要花300大洋开通支付功能!

二、分析一下微信支付的流程

三、界面交互流程

上面都看明白了,接下来就是写代码了

四、这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这个类名

五、在AndroidManifest.xml里面配置相关信息

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

 <!-- 启动主页面 -->
    <activity
      android:name=".ui.activity.MainActivity"
      android:label="@string/app_name" >
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />

        <data android:scheme="wx487898a262d23df3" />
      </intent-filter>
    </activity>

    <activity
      android:name=".wxapi.WXPayEntryActivity"
      android:exported="true"
      android:label="@string/title_activity_wxpayentry"
      android:launchMode="singleTop" />

    <receiver
      android:name=".wxpay.AppRegister"
      android:permission="com.tencent.mm.plugin.permission.SEND" >
      <intent-filter>
        <action android:name="com.tencent.mm.plugin.openapi.Intent.ACTION_REFRESH_WXAPP" />
      </intent-filter>
    </receiver>

  /**
   * 首先调用接口,要把一些基本信息作为参数传给服务器
   * 比如:金额fee,用户id,标题title等
   * 调用成功之后会返回微信所需要的参数,如:
   * appid,noncestr,package,partnerid,prepayid,
   * timestamp,sign
   * 微信支付
   */
  StringBuffer sb = new StringBuffer();
  WeixinPay wpay;
  private AlertDialog mDialog;
  private AlertDialog.Builder builder;

  public void weixinPay() {
    // 通过WXAPIFactory工厂,获取IWXAPI的实例
    api = WXAPIFactory.createWXAPI(this, Constants.APP_ID);
    // 将该app注册到微信
    api.registerApp(Constants.APP_ID);
    // 调用接口
    Params p = new Params();
    p.put("fee",fee);
    p.put("spbill_create_ip", NetWorkUtils.getLocalIpAddress(this));
    String value = "商品标题 " + title;
    try {
      String title = new String(value.getBytes("UTF-8"));
      p.put("body", title);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }

    p.put("userId", O.getUser().getId());

    p.post(C.URL.WEIXIN_PAY, new ReHandler() {

      @Override
      public void onSuccess(NetEntity entity) {

        wpay = entity.toObj(WeixinPay.class);

        PayReq req = new PayReq();
        req.appId = wpay.getAppid();// 微信appId
        req.packageValue = wpay.getPackageValue();// 包
        req.extData = "app data"; // optional
        req.timeStamp = wpay.getTimeStamp();// 时间戳
        req.partnerId = wpay.getPartnerId();// 商户号"
        req.prepayId = wpay.getPrepayId();// 预支付订单号
        req.nonceStr = wpay.getNonceStr();// 随机字符串
        req.sign = wpay.getSign();// 后台返回的签名

        // 本地再次签名
        List<NameValuePair> signParams = new LinkedList<NameValuePair>();
        signParams.add(new BasicNameValuePair("appid", req.appId));
        signParams.add(new BasicNameValuePair("noncestr", req.nonceStr));
        signParams.add(new BasicNameValuePair("package",req.packageValue));
        signParams.add(new BasicNameValuePair("partnerid",req.partnerId));
        signParams.add(new BasicNameValuePair("prepayid", req.prepayId));
        signParams.add(new BasicNameValuePair("timestamp",req.timeStamp));
        req.sign = genAppSign(signParams);

        // 调微信支付
        if(api.isWXAppInstalled()&&api.isWXAppSupportAPI()){
          api.sendReq(req);
        }else{
          builder = new AlertDialog.Builder(WXPayEntryActivity.this);
          builder.setNeutralButton("关闭",
              new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                  mDialog.dismiss();
                }
              }).setTitle("友情提醒").setMessage("请安装微信客户端");

          mDialog = builder.create();
          mDialog.show();
        }

      }

      @Override
      public void onStart() {

      }

      @Override
      public void onFailure(String message) {
      }
    });
  }

  private String genAppSign(List<NameValuePair> params) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < params.size(); i++) {
      sb.append(params.get(i).getName());
      sb.append('=');
      sb.append(params.get(i).getValue());
      sb.append('&');
    }
    sb.append("key=");
    sb.append(Constants.API_KEY);

    this.sb.append("sign str\n" + sb.toString() + "\n\n");
    String appSign = MD5.getMessageDigest(sb.toString().getBytes());
    Log.e("orion", appSign);
    return appSign;
  }

六、在WXPayEntryActivity类里面成功之后回调方法onResp()

@Override
  public void onResp(BaseResp resp) {
    Log.d(TAG, "onPayFinish, errCode = " + resp.errCode);

    if (resp.getType() == ConstantsAPI.COMMAND_PAY_BY_WX) {
      if(resp.errCode==-2){
        Toast.makeText(this,"取消付款!", Toast.LENGTH_LONG).show();
      }
      if(resp.errCode==-1){
        Toast.makeText(this,"支付错误!", Toast.LENGTH_LONG).show();
      }
      if(resp.errCode==0){
        queryOrder();//查询接口调用后台服务器查询是否成功
      }

    }

最后做完之后,一定要签名打包,这个是微信的独家秘笈,你忘了就会跳出-1,呵呵。

最后总结一下支付返回-1的情况
1.检查微信后台的签名,包名是否正确
2.工程是否签名打包
3.如果之前做过测试显示过-1的情况,必须清除微信的清除数据,重新登录微信
4.后台服务器是否按照要求第一次签名,第二次签名,如果第二次签名不对,那我们就自己再次签名一次,我的代码里面写了

以上就是微信支付的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索Android微信支付
Android第三方支付
android微信支付教程、android 第三方支付、android第三方支付sdk、第三方支付对接教程、java第三方支付 教程,以便于您获取更多的相关知识。

时间: 2025-01-29 08:19:47

Android第三方微信支付教程_Android的相关文章

Android第三方微信支付教程

做了微信支付,下载了Demo,发现和之前有所改动,v3.0的版本,也许有的朋友还在摸索,这里我已经成功支付,话不多说,直接进入主题: 一.首先要在微信开发平台注册账号,新增应用,填写正确的包名,正确的签名(MD5中的一串字符冒号去掉,全部小写),当然也会生成的AppID和AppSecret都有用!最后还要花300大洋开通支付功能! 二.分析一下微信支付的流程 三.界面交互流程 上面都看明白了,接下来就是写代码了 四.这里必须要有wxapi这个包名,同时必须有WXPayEntryActivity这

Android实现微信支付功能_Android

开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单.第二步生成微信支付参数.第三步调起微信APP支付.除了需要审核通过的APP应用外,还需要获得微信支付接口权限,然后获取对应的商户号.API密钥,这两者缺一不可,并且在APP微信支付中使用 获得商户号.API密钥 在微信开放平台中查看审核通过的APP应用,是否申请支付功能,若已申请,登录微信支付|商户平台:http://pay.weixin.qq.com 查看对应的商户号.API密钥 >申请微信支付接口 >登录商户平

Android集成微信支付功能_Android

准备工作这里就不说了,包括签约和申请APPID,附上微信开放平台APP开发步骤,不懂的同学可以参考这里: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5 上面的步骤很详细,这里主要说下调起支付的注意事项.按照上面文档中说的商户服务器生成支付订单,先调用统一下单API生成预付单,获取到prepay_id后将参数再次签名传输给APP发起支付. 相关代码如下:  /** * 商户服务器生成支付订单,先调用统一下单API(详见

Android支付宝和微信支付集成_Android

场景 随着移动支付的兴起,在我们的app'中,会经常有集成支付的需求.这时候一般都会采用微信和支付宝的sdk 来集成 (一)支付宝支付 在使用支付宝支付的过程中,我们是在服务器端生成订单,客户端访问接口,并得到订单信息,调用接口支付,支付成功后支付宝会分别 异步调用服务器端,并向客户端返回支付结果. 开发步骤: ①注册支付宝账号--进行实名认证--提交审核资料--审核通过 支付宝无线快捷支付接口: b.alipay.com/order/productDetail.htm?productId=20

android 微信支付 支付成功后,不回调

问题描述 android 微信支付 支付成功后,不回调 android 微信支付成功后,怎么都不进回调的activity和回调方法, 要配置什么东西才可回调吗????求大神,, 解决方案 已解决. 再次仔细看demo,demo有一个WXPayEntryActivity类专门用来显示支付结果的.但是把这个类弄过来依然不能正常使用.最后经过多方打探,各种百度google,原来这个类需要专门的包名来放: 你的包名.wxapi.WXPayEntryActivity.java 解决方案二: 微信支付的回调

Android仿微信支付密码弹出层功能

预览 使用 这个弹出层是一个DialogFragment,逻辑都封装在其内部,使用起来很简单: Bundle bundle = new Bundle(); bundle.putString(PayFragment.EXTRA_CONTENT, "提现:¥ " + 100.00); PayFragment fragment = new PayFragment(); fragment.setArguments(bundle); fragment.setPaySuccessCallBack(

android端微信支付V3版本地签名统一下单详解_Android

满满的都是坑,因为服务器偷懒让客服端写统一下单,服务器只给了通知的url.微信的支付demo并没有统一下单的代码. 读此文前先阅读: https://pay.weixin.qq.com/wiki/doc/api/app/app.PHP?chapter=9_1 一步步的来  先根据统一下单的参数介绍工具: 1. 获取到当前的ip: <span style="font-size:14px;">public String getLocalIpAddress() { try { f

iOS中 最新微信支付/最全的微信支付教程详解

版权声明:本文为博主原创文章,未经博主允许不得转载. 每日更新关注:http://weibo.com/hanjunqiang  新浪微博! 亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数. 2. 下载微信支付sdk 3. 客户端请求订单,后台与微信后台交互,返回给客户端支付参数 4. 调用微信客户端,由微信客户端和微信服务器打交道: 5. 客户端和服务端都会收到支付结果:(前台消息不可靠,

iOS中 最新微信支付/最全的微信支付教程详解 韩俊强的博客

亲们, 首先让我们来看一下微信支付的流程吧. 1. 注册微信开放平台,创建应用获取appid,appSecret,申请支付功能,申请成功之后会返回一些参数. 2. 下载微信支付sdk 3. 客户端请求订单,后台与微信后台交互,返回给客户端支付参数 4. 调用微信客户端,由微信客户端和微信服务器打交道: 5. 客户端和服务端都会收到支付结果:(前台消息不可靠,我们需要去后台验证,如果后台没有收到支付通知,后台去微信服务器验证然后将结果返回给客户端) 支付流程图(大家看一下支付流程). 那么我们现在