Android第三方微信支付教程

Android第三方微信支付教程,第1张

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

做了微信支付,下载了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第三方微信支付教程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1141513.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存