1.首先,需要注册微信开放平台和微信商户平台两个账号。为什么是两个?这不要问我。
商户平台申请支付
获取商户号,其它乱七八糟的什么营业执照什么的,老板去填吧
然后是微信开放平台,注册需要一堆东西,照着填吧,我们需要的是Key和AppId,这一步就没截图了,各个开放平台都大同小异,照着操作就是了
2.下载微信支付的Jar包
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419319167&token=&lang=zh_CN
导入工程
3.后台申请预支付订单,嗯,后台的事,我们只需要从后台拿预支付订单号就Ok。"prepay_id":"wx2016102912484074a5d2fd4d0707519344"
4.现在从1,2,3步拿到的有
商户平台:商户号parentId
开放平台:appId和appKey
后台:预支付订单:prepayId
5.调用下面的方法
/** * 微信支付 */ private void wechatpay() { long currentTimeSeconds = System.currentTimeMillis() / 1000; String randomString = RandomString.getRandomString(32);6.所需要的相关方法String[] strArr = new String[]{ 你的appid, 你的商户号, 你的预支付订单号 , randomString, "" + currentTimeSeconds, "Sign=WXPay" };String wechatSign = RandomString.getWechatSign(strArr);
// 将该app注册到微信 IWXAPI wxapi = WXAPIFactory.createWXAPI(PayOrderActivity.this, null); wxapi.registerApp(你的appid); PayReq req = new PayReq(); req.appId = 你的appid; req.partnerId = 你的商户号;req.prepayId = 你的预支付订单号;req.nonceStr = randomString; req.timeStamp = currentTimeSeconds + ""; req.packageValue = "Sign=WXPay"; req.sign = wechatSign; wxapi.sendReq(req);}
import android.util.Log; import com.tencent.qalsdk.util.MD5; import java.util.Arrays; import java.util.Random; public class RandomString { private static String RANDOM_SOURCE="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; public static String getRandomString(int length) { Random random = new Random(); StringBuilder stringBuilder = new StringBuilder(); for (int i = 0; i < length; i++) { int i1 = random.nextInt(62); stringBuilder.append(RANDOM_SOURCE.charAt(i1)); } String string = stringBuilder.toString(); return string; } public static String getWechatSign(String[] strArr) { StringBuilder builder = new StringBuilder(); String[] strarr = new String[6]; for (int i = 0; i < 6; i++) { StringBuilder builder1 = new StringBuilder(); String key=null; switch (i) { case 0: key = "appid"; break; case 1: key = "partnerid"; break; case 2: key = "prepayid"; break; case 3: key = "noncestr"; break; case 4: key = "timestamp"; break; case 5: key = "package"; break; } builder1.append(key).append("=").append(strArr[i]); String param = builder1.toString(); strarr[i] = param; } Arrays.sort(strarr); for (int i=0;i<6;i++) { String s = strarr[i]; builder.append(s).append("&"); } builder.append("key").append("=").append(你的appkey); return MD5.toMD5(builder.toString()).toUpperCase(); } }7.注册回调的Activity,我这里用了一个不显示的Activity来接收支付回调,只是做为发送通知用,这里包名和类名都不能更改的哟,只能使用
你自己的包名.weapi.WXPayEntryActivity
<!--微信相关--> <activity android:name=".wxapi.WXPayEntryActivity" android:theme="@android:style/Theme.NoDisplay" android:exported="true" android:screenOrientation="portrait"/> <!--微信相关-->
import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.Toast; 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; import com.xunlebao.leplus.api.Contants; public class WXPayEntryActivity extends Activity implements IWXAPIEventHandler{ private IWXAPI api; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); api = WXAPIFactory.createWXAPI(this, 你的appid); api.handleIntent(getIntent(), this); } @Override protected void onResume() { super.onResume(); finish(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); api.handleIntent(intent, this); } @Override public void onReq(BaseReq req) { Toast.makeText(getApplicationContext(),"onReq",Toast.LENGTH_SHORT).show(); } @Override public void onResp(BaseResp resp) { int code = resp.errCode; if (code == 0){ //显示充值成功的页面和需要的操作 sendBroadcast(new Intent(Contants.INTENT_WECHAT_SUCCESS).putExtra("type",0)); } if (code == -1){ //错误 sendBroadcast(new Intent(Contants.INTENT_WECHAT_SUCCESS).putExtra("type",-1)); } if (code == -2){ sendBroadcast(new Intent(Contants.INTENT_WECHAT_SUCCESS).putExtra("type",-2)); //用户取消 } } }
8.官方文档链接,https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5