Android微信支付详解

(一)调用前准备

  • 申请微信开发者账号,添加应用及申请开通微信支付功能,如
    查看开通流程

    • 注意

      • 在申请支付功能时会开通一个微信商户号,请注意是app的商户号,不是公众号的商户号,审核成功后会发到你邮箱里,微信支付商户号(不是商户平台登录号)后面会用到,另外,申请开通微信支付功能需要300元/年(土豪请忽略)。

      • 添加的应用填写的包名根据manifests的package上写;

(二)开发步骤:

1 、SDK下载

 ①方法:
Android Studio环境下:
在build.gradle文件中,添加如下依赖即可:
dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-with-mta:+'
}
或
dependencies {
    compile 'com.tencent.mm.opensdk:wechat-sdk-android-without-mta:+'
}
(其中,前者包含统计功能)
②方法:
    依赖官网里的微信Demo里的libs的SDK文件,
    注意:此方法可能会有出现警告并且无法在模拟器运行的情况 (sdk太老,不兼容Android,或者前面你已经导入的第三方Jar包和微信支付jar冲突)

此时可以尝试使用真机运行;不过,最好的办法就是找到最新版的微信demo里的SDK(如:微信开发者平台-->资源中心-->移动应用-->android 开发文档-->SDK下载 )

因为Demo文件的sdk更新不太及时,最好还是使用build.gradle文件添加依赖方法好。

2、添加权限

  • 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"/>

3、注册到微信

4、开始调用微信支付

第一步,统一下单(一般是服务器做好的) 下单接口文档

  1. 注意事项:

    • 务必提交必须的字段:appid,body,mch_id,nonce_str,notify_url,
      out_trade_no,spbill_create_ip,total_fee,trade_type,sign(都是小写);提交到微信接口时以xml格式提交

    • sign为前面提交的参数按照参数名ASCII码从小到大排序签名拼接起来然后进行MD5运算,再将得到的字符串所有字符转换为大写得到的,如签名生成算法

    • 参与生成sign的key为商户账号的密钥,key设置路径如下:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>密钥设置

  2. 下面是具体代码(如若查看你的sign生成及提交的xml是否正确可以点击如下:签名生成工具(不要用QQ浏览器看,打不开的)
   //拼接字段,顺序不能变
                String A = "appid=你的appID" +
                        "&body=jinshi" +
                        "&mch_id=你的商户号" +
                        "&nonce_str=" + nonce_str +
                        "&notify_url=http://www.szgsip.com/" +
                        "&out_trade_no=" + trade_no +
                        "&spbill_create_ip=192.168.1.1" +
                        "&total_fee=1" +
                        "&trade_type=APP";
                String key = "你的密钥";
                String temp = A + "&key=" + key;
  // 生成sign
               String sign = MD5.md5(temp).toUpperCase();
  • 其中nonce_str为随机字符串,trade_no 为订单号,可以用下面方法模拟生成
    (其实可以写固定的,不过只能下单一次)

String nonce_str = getNonce_str(5);//5为填多长的字符串,不长于32位即可
String trade_no = getNonce_str(8);

public static String getNonce_str(int length) {
        String base = "QWERTYUIOPLKJHGFDSAZXCVBNM0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < length; i++) {
            int number = random.nextInt(base.length());
            sb.append(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值